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

有些时候我们的应用中只能使用网络时间,而不能使用系统的时间,这是为了避免用户关闭了使用网络时间的功能后所产生的误差。

直接上代码。

1.清单文件中网络添加权限。

<!-- 访问Internet资源 -->
<uses-permission android:name="android.permission.INTERNET" />

2.布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.mythmayor.gettime.MainActivity">

    <TextView
        android:id="@+id/tv_nettime"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Hello World!"
        android:textSize="22sp" />

    <Button
        android:id="@+id/btn_nettime"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="获取当前网络时间"
        android:textSize="20sp" />

    <Button
        android:id="@+id/btn_localtime"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="获取当前系统时间"
        android:textSize="20sp" />
</LinearLayout>

3.MainActivity.class主界面中的逻辑

package com.mythmayor.gettime;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.net.URL;
import java.net.URLConnection;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class MainActivity extends Activity implements View.OnClickListener {

    private TextView tvNetTime;
    private Button btnNetTime;
    private Button btnLocalTime;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        /** 初始化控件 */
        initView();
        /** 处理用户输入 */
        handleUserInput();
    }

    private void initView() {
        tvNetTime = (TextView) findViewById(R.id.tv_nettime);
        btnNetTime = (Button) findViewById(R.id.btn_nettime);
        btnLocalTime = (Button) findViewById(R.id.btn_localtime);
    }

    private void handleUserInput() {
        btnNetTime.setOnClickListener(this);
        btnLocalTime.setOnClickListener(this);
    }

    private void getNetTime() {
        URL url = null;//取得资源对象
        try {
            url = new URL("http://www.baidu.com");
            //url = new URL("http://www.ntsc.ac.cn");//中国科学院国家授时中心
            //url = new URL("http://www.bjtime.cn");
            URLConnection uc = url.openConnection();//生成连接对象
            uc.connect(); //发出连接
            long ld = uc.getDate(); //取得网站日期时间
            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(ld);
            final String format = formatter.format(calendar.getTime());
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(MainActivity.this, "当前网络时间为: \n" + format, Toast.LENGTH_SHORT).show();
                    tvNetTime.setText("当前网络时间为: \n" + format);
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void getLocalTime() {
        URL url = null;//取得资源对象
        try {
            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            String format = formatter.format(calendar.getTime());
            Toast.makeText(this, "当前系统时间为: \n" + format, Toast.LENGTH_SHORT).show();
            tvNetTime.setText("当前系统时间为: \n" + format);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_nettime:
                //获取网络时间
                //请求网络资源是耗时操作。放到子线程中进行
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        getNetTime();
                    }
                }).start();
                break;
            case R.id.btn_localtime:
                //获取系统时间
                getLocalTime();
                break;
            default:

                break;
        }
    }
}

最后附上源码下载地址

点击此处进入源码下载界面

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

posted @ 2018-10-08 09:44  星辰之力  阅读(853)  评论(0编辑  收藏  举报