转: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