2012-06-04 4 views
2

IBM против Oracle/Sun JDK, java.util.Timzone ведет себя по-разному,IBM против Oracle/Sun JDK, java.util.Timzone getOffset() ведет себя по-разному

IBM JDK 1.5 против 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, он совпадает с оракулом вывод/солнцем Java -версия Java версии "1.6.0" Java (TM) SE Runtime Environment (сборка 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 включен, включен АОТ) J9VM - 20091001_043491 JIT - r9_20090902_1330ifx1 GC - 20090817_AA) JCL - 20091006_01

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

с этим известным как написать переносимый код, используйте короткие имена EST или длинные имена «US/Eastern» для часовых поясов? – M8R

ответ

0

Я думаю, что это безопасно, что ваш IBM JDK установить, имеет гораздо более старую базу данных часовой пояс, который устанавливает другой JDK , JDK 1.5 был выпущен в 2004 году

+0

Да, я тестировал с той же версией 1.6 для IBM и Oracle JDK, и вывод такой же – M8R

1

IBM говорит нам the answer:

В 2006 году значение идентификатора часового пояса EST изменилось в Olson database. Исторически EST ссылался на американское восточное стандартное время и вносил коррективы для летнего времени. После изменения EST относится к восточному стандартному времени без регулировки для летнего времени. Был также введен новый идентификатор EST5EDT, который имел то же значение, что и исходный идентификатор EST.