win7 32位下 java取系统时间
? ?? ? ?近来遇到一个很神奇的问题,同样的代码在别人机器跑的很好,在我的电脑上就不行。于是四处查找原因。
最后终于查出原因了,顺便与大家分享下。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
?原因:我的电脑是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.06sun.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 X64sun.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 X86sun.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
?
?