簡體   English   中英

為什么SimpleDateFormat提供不同的時間偏移?

[英]Why SimpleDateFormat is giving different time offsets?

我正在將一些日期從舊格式轉換為新日期。 但是其輸出在格式化字符串中包含不同的時區。 示例程序:

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解決方案都不感興趣。

您的時區將夏令時應用於五月份的日期。 冬季是UTC-8,夏天是UTC-7。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM