Android中Calendar與Date的區別以及消除時區對日期操做影響的方法html
在Android中的日期操做經常使用的有三種方式,分別是:android
其中,Unix時間戳在計算上最爲方便和靈活,效率也高;而Date和Calendar則在一些具體的日期計算上更爲便利。其中,在進行日期轉化的時候,常常會用到SimpleDateFormat類來進行格式化,包括將特定格式字符串轉化爲Date對象,以及將Date對象格式化爲特定格式字符串。數據庫
首先來比較一下Date和Calendar的不一樣。使用過日期轉Unix時間戳的人頗有可能會遇到一個問題,那就是Date或者SimpleDateFormat得到的時間戳跟Calendar得到的時間戳有差值,使用中國時區的話這個差值應該是28800000ms,也就是8小時。顯然,這8個小時的差異就是因爲時區產生的,而若是在開發與日期時間緊密相關的程序時忽略了這一時差,極可能就會產生許多匪夷所思的偏差和結果。在Android中,Calendar是可以自動根據手機所設置的時區來調整時間戳的,也就是該時區真實的時間戳;Date和SimpleDateFormat得到的時間戳則不考慮時區,而是獲取標準的GMT時間戳。這二者的時間戳差能夠經過使用TimeZone.getDefault().getRawOffset()方法來取得。那麼如今就能夠很容易地得出解決Date、SimpleDateFormat與Calendar在時間戳上的時差問題的方法,簡單描述以下:app
Calendar calendar = Calendar.getInstance();
//獲取當前日曆對象
long
unixTime = calendar.getTimeInMillis();
//獲取當前時區下日期時間對應的時間戳
long
unixTimeGMT = unixTime - TimeZone.getDefault().getRawOffset();
//獲取標準格林尼治時間下日期時間對應的時間戳
Date date =
new
Date();
//獲取當前日期對象
unixTimeGMT = unixTime = date.getTimeInMillis();
//獲取當前時區下日期時間對應的時間戳
SimpleDateFormat format =
new
SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"
);
//設置格式
String dateString =
"2010-12-26 03:36:25"
;
//設定具備指定格式的日期字符串
unixTimeGMT = unixTime = format.format(date);
//獲取當前時區下日期時間對應的時間戳
顯然,在開發中必須讓時間戳統一,這樣才能避免許多尷尬的問題。那麼在實際開發過程當中,究竟應該是使用手機指定時區的時間戳仍是標準時間戳呢?我的認爲應該使用標準時間戳,由於用戶頗有可能會有更改時區的操做出現,若是使用對應時區的時間戳,而且時間戳做爲某種標記量存入了數據庫,那麼一旦時區發生改變,已存數據將會與當前時區設置產生問題;而使用標準時間戳則能夠避免這一問題,由於經過程序能夠很容易地將時間戳轉化爲標準時間戳,而且標準時間戳是固定的,這樣就能保證即便在修改了時區的狀況下,也能正確處理日期時間。ide
二. Android開發中 獲取當前Android的年月日時分秒的時間this
Android的文件有建議用Time代替Calendar。用Time對CPU的負荷會較小。在寫Widget時特別重要。spa
Time t=new Time(); // or Time t=new Time("GMT+8"); 加上Time Zone資料。unix
惟一不足是取出時間只有24小時模式.code
========================================================================================orm
如何獲取Android系統時間是24小時制仍是12小時制
ContentResolver cv = this.getContentResolver();
String strTimeFormat = android.provider.Settings.System.getString(cv,
android.provider.Settings.System.TIME_12_24);
if(strTimeFormat.equals("24"))
{
Log.i("activity","24");
}
利用Calendar獲取年月日時分秒
Calendar c = Calendar.getInstance();
取得系統日期:year = c.get(Calendar.YEAR)
month = c.get(Calendar.MONTH)
day = c.get(Calendar.DAY_OF_MONTH)
取得系統時間:hour = c.get(Calendar.HOUR_OF_DAY);
minute = c.get(Calendar.MINUTE)
轉自 http://www.cnblogs.com/david-blog/archive/2012/03/09/2387608.html