为什么Java在Windows中选择协调的通用时间时区时返回GMT-4.5中的日期?

Sim*_*son 5 java windows timezone utc

我们在一些涉及"协调世界时"时区的Windows XP机器上看到了一个奇怪的问题.并非所有的Windows XP机器似乎都拥有它,但在那些机器上,以下是简单的Java程序

public class TimeTest {
    public static void main(String[] args) {
        System.out.println(java.util.TimeZone.getDefault());
        System.out.println(new java.util.Date());
    }
}
Run Code Online (Sandbox Code Playgroud)

在JDK 1.6.0_06上打印:

sun.util.calendar.ZoneInfo[id="America/Caracas",offset=-16200000,dstSavings=0,useDaylight=false,transitions=5,lastRule=null]
Fri Nov 13 05:34:14 VET 2009

(即比格林威治标准时间晚4个半小时).我应该补充一点,我的总部设在伦敦,从未去过南美洲.:-)

我的问题是:

  • Java从哪里获得这个时区?我认为协调世界时是应该是GMT的新名称.
  • 为什么有些Windows机器有这个时区但没有其他机器?

Jon*_*eet 0

它使用默认时区打印它。您的主题谈到“选择”UTC,但我在您的程序中没有看到任何此类选择。如果您在其他地方选择了它,请详细说明具体位置。如果您更改了 XP 时区,您可能需要尝试重新启动 - 您的 Java 代码可能从某处获取缓存值。

打印出来java.util.TimeZone.getDefault,我怀疑您会在有问题的机器上看到 VET。

如果您希望代码使用 UTC,则应明确指定...最好使用Joda Time而不是内置Date/Calendar类。

编辑:如果您在同一台机器上有.NET 3.5,请尝试这个小程序来看看认为时区是什么:

using System;

class Test
{
    static void Main()
    {
        Console.WriteLine(TimeZoneInfo.Local.DisplayName);
    }
}
Run Code Online (Sandbox Code Playgroud)