【问题标题】:Java new Date() Getting Wrong Current TimeJava new Date() 获取错误的当前时间
【发布时间】:2013-01-24 13:47:45
【问题描述】:

当我这样做时:

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 对象而不是任何东西,我只是想了解问题

【问题讨论】:

    标签: java date timezone


    【解决方案1】:

    我认为这个blog 可以帮助你。

    引用博客文章来解决问题:

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

    • 手动更改日期/时间,然后改回原来的正确时间。
    • 更改时区,然后返回原来的时区。
    • 从时间服务器请求自动时间更新。

    为了记录和来自同一个博客:

    一些进一步的调查显示:

    • 自 JRE 1.3 以来,人们抱怨 Sun Java 虚拟机出现错误的时区问题。 在过去十年中,针对错误的默认时区提交了几份针对 Sun Java 虚拟机的错误报告。
    • 几乎所有报告都被 Sun 拒绝为不可重现。

    【讨论】:

    • 我已更改为其他时区,并且有效。我已将我的时区设置为其他时区,而不是伊斯坦布尔(同一时区的另一个地方)并且它可以工作。但是为什么它不适用于伊斯坦布尔? Windows regedit 说土耳其标准时间(或类似的东西),但它应该是 Java 日期的欧洲/伊斯坦布尔。也许 Java 无法将土耳其标准时间映射到欧洲/伊斯坦布尔?
    • 确实,“土耳其标准时间”似乎不是官方时区 ID (twiki.org/cgi-bin/xtra/tzdatepick.html#Europe)。相反,它是时区描述(来自此站点:worldtimezone.com/wtz-names/wtz-tst.html
    • 'TimeZoneKeyName' 是 Win 7 和 Win 8 中的土耳其标准时间
    【解决方案2】:

    您可以使用日历:

    Calendar.getInstance(TimeZone.getTimeZone("GMT"), locale);
    

    日期是“依赖于区域设置”的。您也可以设置语言环境:

    Locale.setDefault(...);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      • 2013-12-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2022-06-17
      相关资源
      最近更新 更多