2012-06-04 25 views
2

IBM VS甲骨文/ Sun JDK,java.util.Timzone行爲不同,IBM VS甲骨文/ Sun JDK,java.util.Timzone的getOffset()表現不同

IBM JDK 1.5 VS太陽/ 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 /太陽的輸出中匹配 Java的版本 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*** 
+0

與此已知如何編寫便攜式代碼,使用短名稱'EST'或長名稱'美國/東部'的時區? – M8R

回答

0

我認爲它是安全的,說你的IBM JDK安裝有其他JDK安裝一個更古老的時區數據庫。 JDK 1.5在2004年

+0

是的,我測試了與IBM和Oracle JDK相同的版本1.6,並且輸出是相同的 – M8R

1

發佈IBM告訴我們the answer

2006年,EST時區標識的含義,Olson database改變。歷史上,美國東部標準時間指美國東部標準時間,並對夏令時進行了調整。改變之後,美國東部標準時間指的是東部標準時間,不需要調整夏令時。還引入了新的標識符EST5EDT,其含義與原始的EST標識符相同。