java在visita环境下取出的时间,比正确的系统时间早了8小时,因为我们的时区都是设置为北京时间(即GMT+8)
通过以下代码取时间就会出现问题:
Calendar c = Calendar.getInstance();
DateFormat df =new SimpleDateFormat("HH:mm:ss");
return df.format(c.getTime());
检查后发现是java设置的默认时区变成了id="GMT",而北京的时区应该是GMT+8,所以刚好差了8个小时。
解决办法有三种:
1、优化代码
Calendar c = Calendar.getInstance();
DateFormat df =new SimpleDateFormat("HH:mm:ss");
TimeZone zone = new SimpleTimeZone(28800000,"Asia/Shanghai");
df.setTimeZone(zone);
return df.format(c.getTime());
2、升级JDK版本。
在JDK1.5中的确存在此BUG,Bug Id为6440819
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6440819
此Bug已经在JDK1.6中修复了:
http://java.sun.com/javase/6/webnotes/ReleaseNotes.html
3、手动设置系统变量
增加user.timezone就可以,如下:
java.exe ........ -Duser.timezone=GMT+08 ......
当然还有一种最差的办法就是修改一下系统时间或者修改一下时区。