【发布时间】:2010-12-07 17:01:09
【问题描述】:
在我的客户中,我有这个代码:
System.out.println("Java tz: " + TimeZone.getDefault());
System.out.println("Joda tz: " + ISOChronology.getInstance());
这两行一个接一个。我从不手动设置时区或user.timezone,只依赖从操作系统和本地系统读取的默认值。
执行时,它们会产生:
Java tz: sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
Joda tz: ISOChronology[America/Phoenix]
系统时区确实是凤凰城,而不是 UTC。 Joda怎么会是对的而JDK是错的呢?
编辑:这是一个 Windows 7 x64 主机,JRE 是 1.6.22 x64。
EDIT 2:不要试图复制它。它只在某些系统上失败,而不是在所有系统上(比如我们 3k 用户群中的几十个)。我已经知道 Joda 检查user.timezone,然后检查TimeZone.getDefault()。所以我正在寻找一个解释,说明我直接打电话给TimeZone 和 Joda 自己打电话有什么不同。
【问题讨论】:
-
我已经在我的 Windows 机器上使用 JDK 1.6.0_22 对其进行了测试,它显示的是我的时区,而不是 UTC。也许你应该添加更多信息:操作系统、JDK 版本,也许是一些环境变量?