2016-05-24 82 views
-1

我將幾個日期從舊格式轉換爲新格式。但其輸出在格式化的字符串中包含不同的時區。樣例程序:爲什麼SimpleDateFormat提供不同的時間偏移量?

public class Dated { 

private static final DateFormat OLD_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
private static final DateFormat NEW_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); 

public static void main(String[] args) throws ParseException { 
     List<String> list = Arrays.asList(
       "2015-01-18 00:00:00", 
       "2016-01-18 00:00:00", 
       "2016-03-11 00:00:00", 
       "2016-03-13 00:00:00", 
       "2016-05-18 00:00:00", 
       "2016-05-19 00:00:00", 
       "2016-05-20 00:00:00", 
       "2016-11-09 00:00:00"); 

     System.out.println(Locale.getDefault()); 

     for (String key : list) { 
      System.out.println(NEW_FORMAT.format(OLD_FORMAT.parse(key))); 
     } 
    } 
} 

同樣的程序運行,我和我的語言環境的偏移正確的(和常數)PC罰款。但是當我在實際應用程序運行的服務器上執行它時,給出以下結果:

en_US 

2015-01-18T00:00:00.000-08:00 
2016-01-18T00:00:00.000-08:00 
2016-03-11T00:00:00.000-08:00 
2016-03-13T00:00:00.000-08:00 
2016-05-18T00:00:00.000-07:00 
2016-05-19T00:00:00.000-07:00 
2016-05-20T00:00:00.000-07:00 
2016-11-09T00:00:00.000-08:00 

我想知道爲什麼會發生這種情況?我在代碼中遺漏了什麼,或者它只是一個錯誤的實現SimpleDateFormat

注:我對Java 8Joda-time解決方案不感興趣。

+3

這裏的錯誤是什麼?是關於夏季/冬季1小時的差異,可能是因爲夏令時? – Tunaki

+0

感謝您指出這麼快。事實上,我住在沒有夏令時的國家。所以我錯過了。 – blackSmith

回答

3

您的時區適用於5月份日期的夏令時。冬季爲UTC-8,夏季爲UTC-7。

相關問題