2013-03-24 114 views
1

我有以下代碼:Java的時區與DST

public static void main(String[] args) { 
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    //get current date time with Date() 
     Date date = new Date(); 
     String currentDate = dateFormat.format(date); 

     final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     try { 
      System.out.println(sdf.format(getSomeDate(currentDate,TimeZone.getTimeZone("Asia/Omsk")))); 
     } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
    } 

    public static Date getSomeDate(final String str, final TimeZone tz) throws ParseException { 
     final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
     sdf.setTimeZone(tz); 
     return sdf.parse(str); 
    } 

現在的問題是,如果我用我想要的時區(這是「美國/芝加哥」),我得到了完全錯誤的時間。它的當前時間是+6而不是-6。

那麼我該如何解決這個問題,因爲現在我必須從GMT + 6開始計算時區,以獲得我的程序的正確時間&日期。

此外,Java是否自動合併DST設置?由於世界各地的人都在使用這個功能,所以有些DST時間不同,很難保持正確的時間。

+0

爲什麼不按照這個答案? [java的如何對變化GMT-時間和本地時間](http://stackoverflow.com/questions/10750279/java-how-to-change-gmt-time-to-local-time) – Serdalis 2013-03-24 13:09:44

+0

是的,Java處理DST。事實上,TimeZone類有幾種與DST相關的方法。 Calendar類也使用所有DST設置。 – VGR 2013-03-24 13:22:48

+0

您並未在'sdf'上設置TZ,因此它將格式化日期,就像在本地TZ中一樣(JVM的默認TZ)。 – Blake 2013-03-24 15:11:25

回答

0

這個問題,我想你只是在getSomeDate()方法中爲SimpleDateFormat設置TimeZone一次。嘗試爲SimpleDateFormat的所有實例執行此操作。

相關問題