Mik*_*one 30 java linux timezone
我正在运行Tomcat应用程序,我需要显示一些时间值.不幸的是,时间过了一个小时.我调查了一下,发现我的默认TimeZone被设置为:
sun.util.calendar.ZoneInfo[id="GMT-08:00",
offset=-28800000,
dstSavings=0,
useDaylight=false,
transitions=0,
lastRule=null]
Run Code Online (Sandbox Code Playgroud)
而不是太平洋时区.当我尝试打印默认时区的显示名称时会进一步显示,并显示 "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在启动时使用太平洋时区?我不是在寻找程序化解决方案,它应该是一个配置解决方案.
小智 25
在Ubuntu上,仅更改/ etc/localtime文件是不够的.它似乎也读取/ etc/timezone文件.最好按照说明正确设置时区.特别是,请执行以下操作:
$ 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.
Run Code Online (Sandbox Code Playgroud)
在我的Ubuntu上,如果/ etc/localtime和/ etc/timezone不一致,Java似乎从/ etc/timezone读取默认时区.
Jas*_*Day 24
这是JVM查找zoneinfo文件的方式的"怪癖".请参阅错误ID 6456628.
最简单的解决方法是使/ etc/localtime成为正确的zoneinfo文件的符号链接.对于太平洋时间,以下命令应该起作用:
# sudo cp /etc/localtime /etc/localtime.dist
# sudo ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime
Run Code Online (Sandbox Code Playgroud)
我对符号链接方法没有任何问题.
编辑:为命令添加"sudo".
| 归档时间: |
|
| 查看次数: |
38665 次 |
| 最近记录: |