我正在Tomcat应用程序,并且我需要显示一段时间值。不幸的是,时间快到了一个小时关闭。我看着它发现我的缺省时区被设置为:

sun.util.calendar.ZoneInfo[id="GMT-08:00",
                           offset=-28800000,
                           dstSavings=0,
                           useDaylight=false,
                           transitions=0,
                           lastRule=null]

而不是太平洋次区域。这进一步表示,当我试着打印默认时区的 显示的名字, 和它配备了"格林尼治标准时间-08:00",这似乎表明要我,这是不正确的我们太平洋次区域。我上运行Ubuntu哈苍鹭,升级从勇敢的长臂猿。

是否有一个配置文件的更新可以告诉java运行环境使用太平洋的所有相关的夏令时间的信息?时间我的机器上显示了正确的,因此它似乎并不是一个操作系统范围的错误配置。


好的,这里有一个更新。一个同事建议,我更新JAVA_OPTS在我的/etc/profile包括"-Duser.时区=US/太平洋",这对工作(我也看到了CATALINA_OPTS,我更新)。实际上,我只是出的改进的变量,而不是使用新的/etc/概况(重新启动以后将会改变,我将金).

然而,我仍然认为有一个更好的解决方案...应该有一个配置Java的地方,说什么时区,它是使用,或者它是如何抓住的时区。如果有人知道这样的设置,那将是可怕的,但现在这是一个体面的解决方法。


我使用的1.5,而这是多数肯定DST问题。正如你可以看到,时间区被设置为不使用白天的节省。我认为这是笼统地设定为-8偏移而不是具体的太平洋时区。由于通用-8偏没有夏令的信息,这当然不是使用它,但问题是,在这里我告诉Java使用太平洋次区域时,它开始了吗?我不是在寻找一个方案解决方案,它应该是一个结构解决方案。

有帮助吗?

解决方案

这是一个"奇怪"的方式JVM看起来最多的zoneinfo文件。看看 错误ID6456628.

最简单的解决办法是使/etc/localtime一个链接到正确的zoneinfo文件。对于太平洋的时间,以下命令应工作:

# sudo cp /etc/localtime /etc/localtime.dist
# sudo ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

我没有任何问题的链接方法。

编辑:添加"命令"的命令。

其他提示

在Ubuntu,这是不够的,只是改变/etc/localtime文件。它似乎读/etc/文件时区,太。这是更好地遵循 指令 要设置时区适当的。特别是,做到以下几点:

$ sudo cp /etc/timezone /etc/timezone.dist
$ echo "Australia/Adelaide" | sudo tee /etc/timezone
Australia/Adelaide
$ sudo dpkg-reconfigure --frontend noninteractive tzdata

Current default time zone: 'Australia/Adelaide'
Local time is now:      Sat May  8 21:19:24 CST 2010.
Universal Time is now:  Sat May  8 11:49:24 UTC 2010.

在我Ubuntu,如果/etc/localtime和/etc/时区不一致,Java似乎读默认时区from/etc/时区。

我有一个类似的问题,可能是同一个。但是我tomcat服务器上运行的一个窗框,以便的链接的解决方案不会的工作。

我设置的 -Duser.timezone=Australia/SydneyJAVA_OPTS 然而雄猫不会认识到,DST是有效的。作为一种解决办法,我改变了 Australia/Sydney (GMT+10:00) Pacific/Numea (GMT+11:00)因此,这次将正确地显示然而我想知道实际的解决方案或错误,如果有的话。

它可能有助于双检查时的规则,您的操作系统使用。

/usr/bin/zdump -v /etc/localtime | less

该文件应包含你的夏令的规则,这样一个为2080年:

/etc/localtime  Sun Mar 31 01:00:00 2080 UTC = Sun Mar 31 02:00:00 2080 BST isdst=1 gmtoff=3600

你可以比较这与时间的规则你认为你应该使用。他们可以找到 /usr/share/zoneinfo/.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top