GoogleGson在處理Date格式時有個小陷阱,在不一樣環境中部署時可能會遇到問題。服務器
Gson默認處理Date對象的序列化/反序列化是經過一個SimpleDateFormat對象來實現的,經過下面的代碼去獲取實例:測試
DateFormat.getDateTimeInstance()ui
在不一樣的locale環境中,這樣獲取到的SimpleDateFormat的模式字符串會不同。 spa
例如說,在個人開發機是Windows XP SP3,zh_CN.GBK,模式字符串是: code
"yyyy-M-d H:mm:ss"orm
而在咱們的一臺測試服務器上,RHEL 5.4,en_US.UTF-8,模式字符串則是: 對象
"MMM d, yyyy h:mm:ss a"blog
這就使得一樣的Date對象經過Gson來序列化爲JSON後內容不一樣。例如說要序列化的日期是2010-08-19 16:13:57,那麼在個人開發機上獲得的是: 開發
"2010-8-19 16:13:57"字符串
而在那臺測試服務器上則是:
"Aug 19, 2010 4:13:57 PM"
這就……鬱悶了。在一邊序列化的內容在另外一邊會反序列化失敗。
爲了不使用Gson時遇到locale影響Date格式的問題,使用GsonBuilder來建立Gson對象,在建立過程當中調用GsonBuilder.setDateFormat(String)指定一個固定的格式便可。例如:
Gson gson = new GsonBuilder() .setDateFormat("yyyy-MM-dd HH:mm:ss") .create();