gson日期轉換問題


轉:http://blog.csdn.net/liao_leo/article/details/44593095

 

今天遇到個很奇怪的問題,gson解析日期字符串,本地執行可以,服務器上執行就報錯。


這種問題一般都跟環境相關,到gson源代碼中看到了DateTypeDapter這個類,

 

 

  private final DateFormat enUsFormat
      = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.US);
  private final DateFormat localFormat
      = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT);
  private final DateFormat iso8601Format = buildIso8601Format();

  private static DateFormat buildIso8601Format() {
    DateFormat iso8601Format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.US);
    iso8601Format.setTimeZone(TimeZone.getTimeZone("UTC"));
    return iso8601Format;
  }

 

它有幾種parse日期字符串的的DataFormat類,一個個嘗試,如果不成功就報錯。


 

2015-03-24 14:54:14我們的日期格式是這樣,本地轉沒問題,服務器上轉就報錯。localFormat 和enUsFormat跟本地語言有關,它的一些格式化類都在這個localdata.jar里面,java會獲取本機的語言,然后加載不同的類獲取格式 化信息。我本地的是zh_CN,服務器上的是en_US,本地是能夠轉換2015-03-24 14:54:14這個,因為它的格式正好是yyyy-MM-dd這種,但是服務器上的Dataformat的partern是en_us,無法解析 2015-03-24 14:54:14,就報錯了。

 解決辦法,修改linux的

1.修改/etc/sysconfig/i18n
英文版系統:
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

中文版系統:
LANG="zh_CN.UTF-8"
SYSFONT="latarcyrheb-sun16"


2.source /etc/sysconfig/i18n

3.重啟服務

 


免責聲明!

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



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