每个JDK版本的时区值更改

时间:2013-09-24 11:04:18

标签: java timezone

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

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]

OS: Window 7 64位。

4 个答案:

答案 0 :(得分:1)

时区是针对JVM而不是JDK设置的。你用jvm设置了这个......

Duser.timezone="Europe/Sofia"

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

TimeZone.getDefault()上的o documentation提及......

  

获取此主机的默认TimeZone。默认的来源   TimeZone可能因实施而异。

答案 1 :(得分:1)

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

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

版本1.6.35比版本1.7.02更新。但是,仍然可以使用TZUpdater更新其中一个环境。

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

答案 2 :(得分:0)

我发现了类似的问题,java incorrect timezone 正如我所料,有关于该问题的错误,并且已经解决了当前版本的JDK

答案 3 :(得分:0)

这些问题来来往往,没有合理的解决方案。点击此处:Java incorrect time zone bug on Windows

编辑:回答安德鲁·阿诺德:简而言之,Java运行时很难正确地找到计算机上的当前时区。

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

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