Gson本地和服務器環境不同遇到的Date轉換問題 Failed to parse date []: Invalid time zone indicator


GoogleGson在處理Date格式時有個小陷阱,在不同環境中部署時可能會遇到問題。

Gson默認處理Date對象的序列化/反序列化是通過一個SimpleDateFormat對象來實現的,通過下面的代碼去獲取實例:

DateFormat.getDateTimeInstance()

在不同的locale環境中,這樣獲取到的SimpleDateFormat的模式字符串會不一樣。

例如說,在我的開發機是Windows XP SP3,zh_CN.GBK,模式字符串是:

"yyyy-M-d H:mm:ss"

而在我們的一台測試服務器上,RHEL 5.4,en_US.UTF-8,模式字符串則是:

"MMM d, yyyy h:mm:ss a"

這就使得同樣的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();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM