基本知識
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。