1

当我在同一台机器上编译并运行以下代码语句时,我得到了两个不同的时区值。

public class TimeZoneDemo {
   public static void main( String args[] ){

  // create time zone object     
  TimeZone timezone = TimeZone.getDefault();

  // checking time zone value     
  System.out.println(timezone);
   }    
}

JDK 1.6.35

Tue Sep 24 06:25:03 VET 2013
sun.util.calendar.ZoneInfo[id="America/Caracas",offset=-16200000,dstSavings=0,useDaylight=false,transitions=5,lastRule=null]

JDK 1.7.02

Tue Sep 24 22:56:54 MAGT 2013
sun.util.calendar.ZoneInfo[id="Asia/Magadan",offset=43200000,dstSavings=0,useDaylight=false,transitions=66,lastRule=null]

操作系统: Window 7 64 位。

4

4 回答 4

1

时区是针对 JVM 而不是 JDK 设置的。您将其与 jvm 设置为...

Duser.timezone="Europe/Sofia"

如果您将其传递给 JVM,那么您在更改版本时将始终拥有相同的时区。

关于提及的 oracle文档...TimeZone.getDefault()

获取此主机的默认时区。默认时区的来源可能因实现而异。

于 2013-09-24T11:07:58.957 回答
1

查看下表时,您将看到对 JRE 版本进行了哪些更新。

http://www.oracle.com/technetwork/java/javase/tzdata-versions-138805.html

1.6.35 版本比 1.7.02 版本更新。但是,这些环境之一仍然可能已使用 TZUpdater 进行了更新。

由于只有您知道您的计算机所在的位置,因此只有您知道是否有相关更改。

于 2013-09-24T11:35:15.927 回答
0

我发现了类似的问题,java不正确的时区 正如我所料,这个问题存在错误,并且已经用当前版本的JDK解决了

于 2013-09-24T13:18:35.580 回答
0

这些问题来来去去,并没有合理的解决办法。在此处查看更多信息:Windows 上的 Java 时区错误错误

编辑:回答 Andrew Arnold:简而言之,Java 运行时很难正确地找出计算机上的当前时区。

关于时区的 Windows 注册表信息一直不可靠,依赖于 msvcrt.dll 和各种 msvcrxx.dll 的本机 Windows API 也是如此。还有托管 (.NET) API,它需要安装特定版本的 .NET Framework,这与 Java 的可移植性相矛盾。

因此,Java 运行时的开发人员很难在 Windows 上使用当前时区,并且这种情况可能会一直持续到微软有理由合作为止。

于 2015-02-05T19:13:59.543 回答