IBM与Oracle / Sun JDK,java.util.Timzone getOffset()的行为方式不同

时间:2012-06-04 20:18:50

标签: timezone java timezone-offset ibm-jdk

IBM vs Oracle / Sun JDK,java.util.Timzone表现不同,

IBM JDK 1.5 vs Sun / Oracle JDK 1.6

import java.util.*;
class TimeTest {

public static void main(String args[]){

long now = System.currentTimeMillis();

System.out.println("EST : " + TimeZone.getTimeZone("EST").getOffset(now));
System.out.println("US/Eastern : " + TimeZone.getTimeZone("US/Eastern").getOffset(now));

}
}


***IBM JVM ouput

EST : -14400000
US/Eastern : -14400000

Oracle JVM

EST : -18000000
US/Eastern : -14400000
IBM JDK

java -version

java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition (build pxi32devifx-20090811 (SR10 +IZ56666+IZ56751))
IBM J9 VM (build 2.3, J2RE 1.5.0 IBM J9 2.3 Linux x86-32 j9vmxi3223-20090707 (JIT enabled)
J9VM - 20090706_38445_lHdSMr
JIT  - 20090623_1334_r8
GC   - 200906_09)
JCL  - 20090811


Oracle JDK

java -version

java version "1.6.0_24"                                         
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)            
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode, sharing)

更新,使用IBM JDK 6测试,它匹配oracle / sun的输出     java -version     java版“1.6.0”     Java(TM)SE运行时环境(构建pxi3260sr6ifix-20091015_01(SR6 + 152211 + 155930 + 156106))     IBM J9 VM(版本2.4,JRE 1.6.0 IBM J9 2.4 Linux x86-32 jvmxi3260sr6-20091001_43491(已启用JIT,已启用AOT)     J9VM - 20091001_043491     JIT - r9_20090902_1330ifx1     GC - 20090817_AA)     JCL - 20091006_01

java TimeTest
EST : -18000000
US/Eastern : -14400000***

2 个答案:

答案 0 :(得分:1)

IBM告诉我们the answer

  

2006年,EST时区标识符的含义在Olson database中发生了变化。从历史上看,美国东部时间是指美国东部标准时间,并对夏令时进行了调整。更改后,EST指东部标准时间,不调整夏令时。还引入了新标识符EST5EDT,其含义与原始EST标识符相同。

答案 1 :(得分:0)

我认为可以肯定地说,您的IBM JDK安装有一个比其他JDK安装的更旧的时区数据库。 JDK 1.5于2004年发布。