1。 自動同步服務器
能夠使用.net
SntpClient
類獲取校時服務器時間code
參考:orm
http://blog.csdn.net/huang_cai_yuan/article/details/51689907blog
設置時間:get
方法1:調用android的SystemClock.setCurrentTimeMillis方法,須要系統權限同步
方法2:獲取root權限,而後經過調用linux date命令設置時間:it
Date current = new Date(time); SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd.HHmmss"); String datetime = df.format(current); Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); //os.writeBytes("setprop persist.sys.timezone GMT\n"); os.writeBytes("/system/bin/date -s " + datetime + "\n"); os.writeBytes("clock -w\n"); os.writeBytes("exit\n"); os.flush();
這裏有一個奇怪的問題,date命令設置時間會根據當前時區自動設置當前系統的utc時間,問題在於date命令的時區和app中獲取的時區值不同,關鍵是不知道如何修改date命令的時區form
date + "%Z %z"顯示當前系統的時區是-8配置
但在app中TimeZone.getDefault獲取當前的時區是+8
補充:
這裏若是使用AlarmManager setTimeZone("GMT+08:00")設置時區,則安卓的時區和linux系統的時區是相反的,即便用
顯示的是gmt+8
可是data命令查詢時區顯示是gmt-8
若是使用settimezone("asia/shanghai") 則無此問題。
緣由不明