Android之Gson時間格式不一致導致後臺解析錯誤問題
阿新 • • 發佈:2019-02-04
採用Gson封裝Json資料與後臺進行互動,Android端與後臺介面通常對資料中的Date格式需要做統一處理,這樣就能保證Gson正常解析。但在不同的jdk版本的環境中,這樣處理也不能百分百保證沒有問題,筆者在實踐中就遇到這樣的問題:後臺的Gson解析方法只能接受12時制的時間格式,24時制的時間解析發生錯誤。
這是24時制,後臺解析失敗導致業務處理失敗:
{"date":"Aug 20, 2017 03:50:30"}
這是12時制,後臺可以正常解析:
{"date":"Aug 20, 2017 4:00:59 AM"}
思來想去,只要將Android端時間設定或轉換成12時制的就行了,這樣以最快的方法解決以上問題。時間轉換就需要了解下SimpleDateFormat,SimpleDateFormat是一個以與語言環境有關的方式來格式化和解析日期的具體類。它允許進行格式化(日期 -> 文字)、解析(文字 -> 日期)和規範化。
日期和時間模式
字母 | 日期或時間元素 | 表示 | 示例 |
---|---|---|---|
G | Era | 標誌符 | Text |
y | 年 | Year | 1996; 96 |
M | 年中的月份 | Month | July; Jul; 07 |
w | 年中的週數 | Number | 27 |
W | 月份中的週數 | Number | 2 |
D | 年中的天數 | Number | 189 |
d | 月份中的天數 | Number | 10 |
F | 月份中的星期 | Number | 2 |
E | 星期中的天數 | Text | Tuesday; Tue |
a | am/pm 標記 | Text | PM |
H | 一天中的小時數(0-23) | Number | 0 |
k | 一天中的小時數(1-24) | Number | 24 |
K | am/pm 中的小時數(0-11) | Number | 0 |
h | am/pm 中的小時數(1-12) | Number | 12 |
m | 小時中的分鐘數 | Number | 30 |
s | 分鐘中的秒數 | Number | 55 |
S | 毫秒數 | Number | 978 |
z | 時區 | General time zone | Pacific Standard Time; PST; GMT-08:00 |
Z | 時區 | RFC 822 time zone | -0800 |
時間格式轉換程式碼如下:
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
String time = gson.toJson(new Date());
LogUtil.d("原格式時間",time);
//如果當前時24時制則進行格式轉換
if(android.text.format.DateFormat.is24HourFormat(this)){
SimpleDateFormat dateFormat = new SimpleDateFormat("MMM d, yyyy h:mm:ss aa", Locale.ENGLISH);
String newTime = dateFormat.format(new Date());
LogUtil.d("新格式時間",newTime);
}
日誌列印如下:
原格式時間: Aug 20, 2017 04:32:51
新格式時間: Aug 20, 2017 4:32:51 AM
程式碼中的Locale.ENGLISH可以設定時間的語言:中文/英語/法語...
時間格式轉換成功,該問題解決完畢,有興趣的朋友也可以採用String替換方法進行時間字串拼接也是可以的。