1. 程式人生 > >Android之Gson時間格式不一致導致後臺解析錯誤問題

Android之Gson時間格式不一致導致後臺解析錯誤問題

採用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替換方法進行時間字串拼接也是可以的。