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

Java new Date()获取错误的当前时间,java,date,timezone,Java,Date,Timezone,当我这样做时: 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上检查date对象时(我使用Java1.6),区域信息的id是America/Caracas,应该是Europe/Istanbul 有什么问题吗,

当我这样做时:

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上检查date对象时(我使用Java1.6),区域信息的id是America/Caracas,应该是Europe/Istanbul

有什么问题吗,有什么想法吗


PS:我不想将时区作为VM参数传递,我不想使用日历对象,因为我有一些库使用日期对象而不是任何对象,我只想了解这个问题

您可以使用日历:

Calendar.getInstance(TimeZone.getTimeZone("GMT"), locale);
日期取决于“区域设置”。您也可以设置区域设置:

Locale.setDefault(...);
我想这对你有帮助

引用博文解决问题:

从Windows XP控制面板打开“日期/时间”对话框并应用以下更改之一后,Java API开始正常工作:

  • 手动更改日期/时间,然后更改回原始的正确时间
  • 改变时区,然后回到原来的时区
  • 正在从时间服务器请求自动时间更新
对于来自同一博客的记录:

进一步调查显示:

  • 自JRE 1.3以来,人们抱怨Sun Java虚拟机上存在错误的时区问题。 在过去十年中,针对Sun Java虚拟机提交了几份错误报告,涉及错误的默认时区
  • 几乎所有的报告都被Sun公司拒绝,认为无法生产

我已经换到了其他时区,而且效果不错。我已经把我的时区设置成了别的地方,而不是伊斯坦布尔(同一时区的另一个地方),而且很管用。但是为什么它对伊斯坦布尔不起作用?Windows regedit说土耳其是标准时间(或类似的时间),但它应该是Java日期的欧洲/伊斯坦布尔。也许Java无法将土耳其标准时间映射到欧洲/伊斯坦布尔?事实上,“土耳其标准时间”似乎不是官方时区id()。取而代之的是时区描述(来自此网站:)“TimeZoneKeyName”是Win 7和Win 8中的土耳其标准时间