Android - 获取系统时间和网络时间

Android获取时间的方法有获取网络时间或者使用系统时间,两者我感觉各有优点各有缺点。

话不多说,直接上代码,用的话拿就好!!!

通过网络获取时间,这是我写的一个工具类,在子线程直接调用就可以,参考一下:

public static Date getNetTime(){
        String webUrl = "http://www.ntsc.ac.cn";//中国科学院国家授时中心
        try {
            URL url = new URL(webUrl);
            URLConnection uc = url.openConnection();
            uc.setReadTimeout(5000);
            uc.setConnectTimeout(5000);
            uc.connect();
            long correctTime = uc.getDate();
            Date date = new Date(correctTime);
            return date;
        } catch (Exception e) {
            return new Date();
        }
    }
获取本地系统时间代码:
long time = System.currentTimeMillis();
Date date = new Date(time);
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 E HH时mm分ss秒");
main_date.setText(format.format(date));

全部代码:

package com.djp.test.test2;

import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import android.widget.Toast;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * 一般耗时操作都不允许放在主线程里直接操作,如网络操作等,
 * 一般需要开一个子线程去访问网络,然后通过handler去更新界面。
 * 显示例如2019年02月22日  周五  14时56分08秒
 */
//温度  多云转晴  南风3-4级
public class TwoActivity extends AppCompatActivity {
    private  TextView textView;

    private Handler handler = new Handler(){
        //此方法在主线程中使用,用于刷新UI
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 1:
                    /*long time = System.currentTimeMillis();
                    Date date = new Date(time);
                    SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 E HH时mm分ss秒");
                    main_date.setText(format.format(date));*/



                  // textView.setText(new SimpleDateFormat("yyyy年MM月dd日 E HH时mm分ss秒").format(new Date(System.currentTimeMillis())));//获取系统时间

                    textView.setText(new SimpleDateFormat("yyyy年MM月dd日 E HH时mm分ss秒").format(msg.obj));//获取网络时间
                    break;

            }
        }
    };

    /**
     * 获取当前时间
     * @return
     */
    public static Date getNetTime(){
        //设置了超时时长为5秒,若获取网络时间在5秒内无法获取,则返回本机时间。
        String webUrl = "http://www.ntsc.ac.cn";//中国科学院国家授时中心
        try {
            URL url = new URL(webUrl);
            URLConnection uc = url.openConnection();//生成连接对象
            uc.setReadTimeout(5000);
            uc.setConnectTimeout(5000);
            uc.connect();//发出连接
            long correctTime = uc.getDate();//取得网站日期时间
            Date date = new Date(correctTime);
            return date;
        } catch (Exception e) {
            return new Date();
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);
        textView = findViewById(R.id.textview1);
        new TimeThread().start();//启动线程
    }
    public class TimeThread extends Thread {
        @Override
        public void run() {
            super.run();
            do {
                try {
                    Thread.sleep(1000);


                    Message msg = new Message();
                    msg.what = 1;
                    //调用获取时间
                    msg.obj= getNetTime();

                    handler.sendMessage(msg);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    e.printStackTrace();
                }
            } while (true);
        }


    }
}

 

你可能感兴趣的:(Android工具类)