獲取系統時間和網路時間
阿新 • • 發佈:2019-02-16
有些時候我們的應用中只能使用網路時間,而不能使用系統的時間,這是為了避免使用者關閉了使用網路時間的功能後所產生的誤差。
直接上程式碼。
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;
}
}
}