Gson使用中遇到的Date格式問題

轉載自:http://rednaxelafx.iteye.com/blog/788306

在Java中處理JSON格式的數據時,Google Gson是個不錯的選擇,用起來挺方便的,也有一定靈活性。我現在工作中在參與的兩個項目裏都有用它。不過它在處理Date格式時有個小陷阱,在不同環境中部署時可能會遇到問題。 


Gson默認處理Date對象的序列化/反序列化是通過一個SimpleDateFormat對象來實現的,通過下面的代碼去獲取實例: 
Java代碼  收藏代碼
  1. DateFormat.getDateTimeInstance()  


在不同的locale環境中,這樣獲取到的SimpleDateFormat的模式字符串會不一樣。 
例如說,在我的開發機是Windows XP SP3,zh_CN.GBK,模式字符串是: 
Java代碼  收藏代碼
  1. "yyyy-M-d H:mm:ss"  

而在我們的一臺測試服務器上,RHEL 5.4,en_US.UTF-8,模式字符串則是: 
Java代碼  收藏代碼
  1. "MMM d, yyyy h:mm:ss a"  


這就使得同樣的Date對象通過Gson來序列化爲JSON後內容不同。例如說要序列化的日期是2010-08-19 16:13:57,那麼在我的開發機上得到的是: 
Js代碼  收藏代碼
  1. "2010-8-19 16:13:57"  

而在那臺測試服務器上則是: 
Js代碼  收藏代碼
  1. "Aug 19, 2010 4:13:57 PM"  

這就……鬱悶了。在一邊序列化的內容在另一邊會反序列化失敗。 

爲了避免使用Gson時遇到locale影響Date格式的問題,使用GsonBuilder來創建Gson對象,在創建過程中調用GsonBuilder.setDateFormat(String)指定一個固定的格式即可。例如: 
Java代碼  收藏代碼
  1. Gson gson = new GsonBuilder()  
  2.   .setDateFormat("yyyy-MM-dd HH:mm:ss")  
  3.   .create();  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章