轉:http://blog.csdn.net/liao_leo/article/details/44593095java
今天遇到個很奇怪的問題,gson解析日期字符串,本地執行能夠,服務器上執行就報錯。linux
這種問題通常都跟環境相關,到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;
}ui
它有幾種parse日期字符串的的DataFormat類,一個個嘗試,若是不成功就報錯。spa
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,就報錯了。.net
解決辦法,修改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.重啓服務orm