近来遇到一个很神奇的问题,同样的代码在别人机器跑的很好,在我的电脑上就不行。于是四处查找原因。
最后终于查出原因了,顺便与大家分享下。
原因:我的电脑是64位win7 ,今年新出的本本。三个版本的jdk下测试结果如下:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class test {
public static void main(String[] args) {
Calendar c = Calendar.getInstance();
System.out.println(c.getTimeZone());
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String tmpDate = df.format(date);
System.out.println(tmpDate);
//JDK1.5.0.06
sun.util.calendar.ZoneInfo[id="GMT",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
2011-06-26 11:41:52 时间错误了 应该是2011-06-26 19:41:52 差 了8个小时
//JDK1.5.0.22 X64
sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
2011-06-26 19:39:24
//JDK1.5.0.22 X86
sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null]
2011-06-26 19:40:14
}
}
另外,如果是 jdk 1.5 的话,那用 java -version 看一下 java 的版本号,根据 Sun 提供的资料,对应于 Windows 系统,JDK 1.5 最小的版本号:
Windows 7, Windows 2008 R2, Windows Vista SP2, Windows 2008 SP2 需要 jdk1.5.0_21 及以后版本
Windows 2008 需要 1.5.0_19 及以后版本
Windows Vista 需要 1.5.0_14 及以后版本
JDK 1.6 系统支持最小的版本号
Windows 7 需要 1.6.0_14 及以后版本
Windows Server 2008 R2 需要 1.6.0_16 及以后版本
解决方案:
1. 暂时解决的办法是:在jvm参数设置 -Duser.timezone=Asia/Shanghai
2. 更换jdk版本为大于jdk1.5.0_21
3. 修改注册表 参考http://blog.csdn.net/Nonetracer/archive/2010/07/07/5718796.aspx