問題描述:將「2014-11-02 01:00:15 EST」轉換爲GMT。Java從EDT到EST的時區過渡期
這似乎很容易。但爲什麼下面的代碼給出了錯誤的答案?
背景:
- EDT又名GMT-4
- EST又名GMT-5
- 2014年11月2日1點○○分15秒EST == 2014年11月2日06:00: 15 GMT
- 如果我用戶註釋掉日期字符串它的作品!
- EDT(直到2014年11月2日凌晨2點) - >在凌晨2點,我們去到美國東部時間凌晨1點
代碼示例:
ZoneId gmt = ZoneId.of("GMT");
//String from = "2014-11-02 01:00:15 GMT-05:00";
String from = "2014-11-02 01:00:15 EST";
final DateTimeFormatter dateTimeFormatterone = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
ZnedDateTime zonedDateTime = ZonedDateTime.parse(from, dateTimeFormatterone);
ZonedDateTime gmtzonedDateTime = zonedDateTime.withZoneSameInstant(gmt);
String result = gmtzonedDateTime.format(dateTimeFormatterone);
這就是結局是什麼。
result == "2014-11-02 05:00:15 GMT"
它不應該是 結果== 「2014年11月2日6時00分15秒GMT」
任何幫助將是巨大的。我認爲這是Java中的一個錯誤。但我也認爲我在某個地方犯了一個錯誤。
感謝 保羅
我相信你有它倒退。 EDT是GMT-4,EST是GMT-5。這意味着輸出(05:00:15 GMT)是正確的。 – VGR 2014-10-27 21:23:56
你說得對。我更新了這個例子。如果你有機會看看我更新的例子。 – user2337757 2014-10-27 23:28:33
這很棘手,也許是啓發式的,因爲即使在EDT處於活動狀態時,也可以始終將時間指定爲EST。這意味着01:00:15(以及從凌晨1點到凌晨2點的整個小時)在當晚的EST中連續發生兩次。所以當Java解析日期時,解析器應該假設該小時的第一次出現,還是第二次出現? – VGR 2014-10-28 16:13:00