android 時區轉換

基本知識

Android本身提供了多個時間格式,像格林威治時間,世界時協調時間,夏日時等

GMT:格林威治時間

UTC:世界時協調時間

DST:夏時令

。。。。

這些時間格式都可以使用TimeZone.getTimeZone(“GMT”)或者TimeZone.getTimeZone(“UTC”)等來獲取時間格式。

在android里Calendar,SimpleDateFormate,Date以及對應的子類都可以設置時間格式和時區。比如calendar.setTimeZone()

如果沒有設置時區的話,系統有一個getDefault()方法,來獲取當前手機系統的時間格式和時區,比如你手機出廠就是GMT時間格式,那就設置為GMT時間;有的手機可以自己設置時間格式,那就是自己在系統里面設置的那個時間格式。

但系統里面也提供了一些方法,比如System.getCurrentTime()是固定的時間格式,是UTC的時間,不管系統設置的是什么時間格式,返回的都是UTC時間。

下面說說時區的問題,通常用的GMT和UTC都是有時區問題的,全球分為24個時區,23個整時區,和一個分時區。每個時區可以直接在對應的時間格式后面加上。比如GMT+8,GTM-8,GMT+08:30等。{^GMT[-+](\\d{1,2})(:?(\\d\\d))?$}括號里為系統匹配時區的正則表達式。

一般手機里面的時區是跟著手機系統設置走的,但是如果非要指定某個時區的話,就可以像上面舉例子一樣,GMT+8,GTM-8,GMT+08:30,TimeZone.getTimeZone(“GMT-8”),然后設置在對應的Calendar,或者simpleDateFormate上,再去轉化時間就可以按照自己的設定好的轉了。

Calendarcalendar =Calendar.getInstance();

TimeZone timeZone = TimeZone.getTimeZone("GMT+9");

calendar.setTimeZone(timeZone);

System.out.println(calendar.get(Calendar.YEAR)+"年"

+(calendar.get(Calendar.MONTH)+1)+"月"

+calendar.get(Calendar.DAY_OF_MONTH)+"日 "

+calendar.get(Calendar.HOUR_OF_DAY)+":"

+calendar.get(Calendar.MINUTE));

這樣就可以完成指定時區的轉換。

實例:

平常我們可能拿到的是 2016-04-19T22:00:44.831466+00:00這樣個時間

首先我們需要把這個時間解析成一個Date,

SimpleDateFormat dateFormat =newSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ");

TimeZone timeZone = TimeZone.getTimeZone("GMT+9");

dateFormat.setTimeZone(timeZone);

date= dateFormat.parse(time, newParsePosition(0));

這樣解析出來的時間就是格林威治9時區的時間了,如果不設置系統就會取手機默認的時間格式和時區,轉化成對應的時間。

dateFormat.applyPattern("yyyy-MM-dd HH:mm");

dateFormat.format(date);

這樣就能按照自己的意愿來選擇輸出的時間格式了

附:

之前看了一下DST(夏時令),這個沒有時區的問題,就是根據地區太陽升起的時間來確定的。而且是有的地區是使用的,有的地區是沒有使用的,所以TimeZone類中提供了一個方法useDaylightTime()和inDaylightTime(Date),來判斷這個地區是否使用了DST。如果一個地方之前使用,但是現在不使用,就返回false。如果一個國家之前從來沒有使用,但是下一年將開始使用,將返回true。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容