Java获取时间与系统时间相差8小时终极解决方案

 

问题环境:Weblogic8+VISTA

问题描述:MyEclipse直接使用bea\jdk142_04的JVM环境,项目log打出的时间总是比系统时间慢8小时.

出现问题的原因:J2SE 1.4包含世界不同地区的时间区域数据文件。jre/lib/zi存放着这些文件。在J2SE 1.4里,sun.util.calendar.ZoneInfo从这些文件获取DST(夏令时)规则。

java.util.TimeZone 类中getDefault方法的源代码显示,它最终是会调用sun.util.calendar.ZoneInfo类的getTimeZone 方法。

这个方法为需要的时间 区域返回一个作为ID的String参数。这个默认的时间区域ID是从 user.timezone (system)属性那里得到。如果user.timezone没有定义,它就会尝试从user.country和java.home (System)属性来得到ID。 如果它没有成功找到一个时间区域ID,它就会使用一个”fallback” 的GMT值。换句话说, 如果它没有计算出你的时间区域ID,它将使用GMT作为你默认的时间区域。

BTW: 可以通过下面程序获取系统相关属性(such as:user.timezone、os.name ……)

Properties props=System.getProperties();
Iterator iter=props.keySet().iterator();
while(iter.hasNext())
{
String key=(String)iter.next();
System.out.println(key+" = "+ props.get(key));
}

 

三种解决问题方案:

一、在取日期以前设置一下时区—>>>

TimeZone tz = TimeZone.getTimeZone(“ETC/GMT-8”);
TimeZone.setDefault(tz);

此种方法适用于单次快速获取系统本地时间

二、设置java命令参数

java -Duser.timezone=Asia/Jerusalem DateTest

三、设置JVM的默认时区为东八区(北京时间)—>>>

在下 面四个目录(bea\jdk142_11\jre\lib\zi\Etcbea\jdk142_11\jre\lib\zibea\jrockit81sp6_142_10\jre\lib\zi\Etcbea\jrockit81sp6_142_10\jre\lib\zi)下找到GMT文件bak备份 一下,然后复制一份GMT-8并重命名为GMT,复制完毕,重新运行一下java程序问题即可解决!

 

扩展阅读:

JAVA日期 和时间类彻底解决(Translated by Willpower)

解决 weblogic与系统时间相差8小时的问题

http://xzh.i3geek.com
Back to Top