1. 程式人生 > >獲取系統時間和網路時間

獲取系統時間和網路時間

有些時候我們的應用中只能使用網路時間,而不能使用系統的時間,這是為了避免使用者關閉了使用網路時間的功能後所產生的誤差。

直接上程式碼。

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;
        }
    }
}

最後附上原始碼下載地址