Java new Date() 获取错误的当前时间

3
当我执行以下操作时:
new Date();

年份、天数等信息正确,但小时和分钟错误。我在我的计算机上使用64位Windows 7操作系统:

Windows time is OK,
Bios Time is OK,
Windows Time Zone is OK,
Windows Time Zone at Regedit is OK

然而,当我在Java中检查日期对象时(我使用Java 1.6),时区信息的ID是 America/Caracas,而应该是 Europe/Istanbul
有什么问题,有任何想法吗?
PS:我不想将时区作为VM参数传递,也不想使用Calendar对象,因为我有一些库使用的是Date对象,而不是其他任何东西,我只想了解问题所在
2个回答

3
您可以使用日历:
Calendar.getInstance(TimeZone.getTimeZone("GMT"), locale);

日期是“区域设置相关的”。您也可以设置区域设置:
Locale.setDefault(...);

3
我认为这篇博客文章可以帮到您。
以下是该博客文章中的引述,可解决此问题:
在从Windows XP控制面板打开日期/时间对话框后,应用以下更改之一后,Java API开始正常工作:
  • 手动更改日期/时间然后改回原始正确时间
  • 更改时区,然后改回原始时区
  • 从时间服务器请求自动时间更新。
同一博客文章提供了以下记录:
进一步调查发现:
  • 自JRE 1.3以来,人们抱怨Sun Java虚拟机存在错误的时区问题。在过去的十年中,有几份针对Sun Java虚拟机的bug报告涉及错误的默认时区。
  • 几乎所有报告都被Sun拒绝为无法再现。

我已经更改了其他时区并且它起作用了。我将我的时区设置为伊斯坦布尔以外的其他地方(在同一时区),它也可以正常工作。但是为什么对于伊斯坦布尔不起作用呢?Windows注册表显示的是土耳其标准时间(或类似的东西),但在Java日期中应该是欧洲/伊斯坦布尔。也许Java无法将土耳其标准时间映射到欧洲/伊斯坦布尔? - kamaci
实际上,“土耳其标准时间”似乎不是一个官方的时区标识符(http://twiki.org/cgi-bin/xtra/tzdatepick.html#Europe)。相反,它是该时区的描述(来自此网站:http://www.worldtimezone.com/wtz-names/wtz-tst.html)。 - ben75
"TimeZoneKeyName" 在 Win 7 和 Win 8 中均为土耳其标准时间。 - kamaci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接