[Android] format TimeZone 時區校正– 17 | android timezone取得
有時候在串接API時,Server端回傳時間的格式可能不是你期望中的格式或時區例如今天Server回傳給你RFC3339格式[1]形式如下:2016-10-03T11:02:45.341Z其中日期跟時間合併表示時,要在時間前面加一大寫字母T再對協調世界時[2]的時間最後加一個大寫字母Z這個時間可視為格林威治標準時間[3](UTC+0)的時區,和我們所在的時區台灣(UTC+8)相差了八個小時這時就必須針對回傳的格式進行調整,再轉換成我們要的時區做法如下:首先把回傳的格式告訴 DateFormat然後轉成UTC格式程式才看得懂記得格式中的T還有Z要使用單引號標起來StringrespTime="2...
有時候在串接API時,Server 端回傳時間的格式可能不是你期望中的格式或時區
例如今天Server回傳給你 RFC 3339 格式[1]
形式如下:
2016-10-03T11:02:45.341Z其中日期跟時間合併表示時,要在時間前面加一大寫字母T
再對協調世界時[2]的時間最後加一個大寫字母Z
這個時間可視為格林威治標準時間[3](UTC+0) 的時區,
和我們所在的時區台灣(UTC+8)相差了八個小時
這時就必須針對回傳的格式進行調整,再轉換成我們要的時區
做法如下:
首先把回傳的格式告訴 DateFormat 然後轉成UTC格式程式才看得懂
記得格式中的 T 還有 Z 要使用單引號標起來
String respTime = "2016-10-03T11:02:45.282Z"; DateFormat df = new SimpleDateFormat("yyyy-M-ddThh:mm:ss.SSSZ"); df.setTimeZone(TimeZone.getTimeZone("UTC"));接著再把這個時間指定到我們要的時區,並以指定的格式輸出
比如我想要得到 2016/10/3 09:25 這種格式
可以這樣指定給新的 SimpleDateFormat:
Date date = df.parse(respTime); df = new SimpleDateFormat("yyyy/MM/dd HH:mm"); df.setTimeZone(TimeZone.getDefault()); Log.i(TAG,"Local Time: " + df.format(date));yyyy/MM/dd HH:mm 表示 年/月/日 小時(24h制)/分鐘
如果想用12小時制的 只要把HH改成小寫hh 就可以了
結果:
2016/10/03 19:02
最後附上 source code[4]
GitHub 範例專案:https://g...