当我在同一台机器上编译并运行以下代码语句时,我得到两个不同的时区值。
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位。
答案 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上使用当前时区,这可能会持续到微软有一些合作的理由。