天天看點

java(MyEclipse)相差8小時處了解決方法

最近有遇到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。這樣,就達到了掩人耳目的目的。試一下,可以解決!