我正在运行Tomcat应用程序,并且需要显示一些时间值。不幸的是,时间已经过去了一个小时。我看着它,发现我的默认TimeZone被设置为:Java时区搞砸了
sun.util.calendar.ZoneInfo[id="GMT-08:00",
offset=-28800000,
dstSavings=0,
useDaylight=false,
transitions=0,
lastRule=null]
而不是太平洋时区。当我尝试打印默认时区的display name时,会进一步显示此消息,并且会显示“GMT-08:00”,这似乎表明它未正确设置为美国太平洋时区。我在Ubuntu Hardy Heron上运行,从Gutsy Gibbon升级。
是否有配置文件可以更新以告知JRE使用Pacific以及所有关联的夏令时信息?我的机器上的时间显示正确,所以它似乎不是操作系统范围的错误配置。
好的,这是一个更新。一位同事建议我更新我的/ etc/profile中的JAVA_OPTS以包含“-Duser.timezone = US/Pacific”,该工作正常(我也看到了CATALINA_OPTS,我也更新了它)。实际上,我只是将变化导出到变量中,而不是使用新的/ etc/profile(稍后重新启动会接受变化,我将变为黄金)。
但是,我仍然认为有一个更好的解决方案...应该有一个配置Java的地方,说什么时区它使用,或者它是如何抓住时区。如果有人知道这样的设置,这将是非常棒的,但现在这是一个体面的解决方法。
我使用的是1.5,它绝对是DST问题。如您所见,时区设置为不使用夏令时。我的信念是它一般设置为-8偏移量而不是特定的太平洋时区。由于通用-8偏移量没有夏令时信息,因此当然不会使用夏令时信息,但问题是,我在哪里告诉Java在启动时使用太平洋时区?我不是在寻找一个编程解决方案,它应该是一个配置解决方案。
+1:我刚刚在完全更新的Ubuntu 9.10服务器上遇到了这个问题。 Sun JDK 1.6.0_15-b03,系统在美国/东部时区的安装时进行配置。/etc/localtime包含/ usr/share/zoneinfo/US/Eastern的相同内容。 Java在2010年3月15日和4月25日之间的日期产生不正确的结果。用/ usr/share/zoneinfo/US/Eastern的符号链接替换文件后,我现在可以得到正确的结果。 我很惊讶这个bug是a)仍然开放,b)影响一个完全更新的Ubuntu服务器(9.10 - Karmic)。 – 2010-03-31 22:25:08
该错误在Java版本7(b72)中被记录为关闭。 – Raedwald 2013-07-20 15:37:17