迷茫海燕的专栏

今天遇到个很奇怪的问题,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.重启服务

最有效的资本是我们的信誉,它24小时不停为我们工作。

迷茫海燕的专栏

相关文章:

你感兴趣的文章:

标签云: