现在的位置: 首页 > 综合 > 正文

java(MyEclipse)相差8小时处理解决方法

2012年02月01日 ⁄ 综合 ⁄ 共 1488字 ⁄ 字号 评论关闭

 

最近有遇到java的时间不对的事件,现象:

通过java语句获得系统时间,用

  Date d = new Date();
  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd  kk:mm:ss ");
  System.out.println(sdf.format(d));

或者:

    Calendar now = Calendar.getInstance();
    System.out.println(now.get(Calendar.HOUR_OF_DAY));
    System.out.println(now.get(Calendar.MINUTE));
    System.out.println(now.get(Calendar.SECOND));

取得的时间总是比系统时间少8个小时,获得的总是格林尼治时间(0时区的时间),检查系统时间确实是正确的,时区为GMT+8:00北京……等;但是此前并没有发生这类问题,以前时间是正确的,但是重装系统后出现了java的时间问题,可能是系统时间注册表出现问题,这里就不修改注册表了。这时MyEclipse或Java默认的时间时区是0时区,所以:

 

考虑到代码的可移植性,在用到时间的地方都初始化当前的时区;加上代码:

setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));

修改如下:

  Date d = new Date();
  SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd  kk:mm:ss ");
  sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
  System.out.println(sdf.format(d));

或者:

    Calendar now = Calendar.getInstance();
    now.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));//important
    System.out.println(now.get(Calendar.HOUR_OF_DAY));
    System.out.println(now.get(Calendar.MINUTE));
    System.out.println(now.get(Calendar.SECOND));

这样就可以了。

 

===========================================================================================

针对这一问题之前说过在系统代码用到时间时可以在时间初始化前加上以下一句话,但是这样比较麻烦,因此,在安装Java的JDK之后,可以替换几个源文件以达到相同的目的。

setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));

 

另一种方法:

找到Java目录下的

依次: jdk1.60/jre/lib/zi/Etc

      jdk1.60/jre/lib/zi

      java/jre1.6.0_14/jre/lib/zi/Etc

      java/jre1.6.0_14/jre/lib/zi

下找到GMT文件,删除之(可以备份一下,以防万一),然后复制一份GMT-8并重命名为GMT替换原来的GMT。这样,就达到了掩人耳目的目的。试一下,可以解决!

抱歉!评论已关闭.