我有下面的代碼分析出從給定日期字符串ZonedDateTime
對象中,輸入字符串的格式如下:轉換與指定GMT
"Thu, 03 Mar 2016 02:42:00 +1000 (AEST)"
我的解析代碼像這樣:
public ZonedDateTime parseDate(String dateString) throws Exception {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ccc, dd MMM yyyy HH:mm:ss Z (z)");
ZonedDateTime dateTime = ZonedDateTime.parse(dateString, formatter);
ZoneId gmt = ZoneId.of("GMT");
ZonedDateTime dateTimeInGMT = dateTime.withZoneSameInstant(gmt);
return dateTimeInGMT;
}
,我有這樣的單元測試:
@Test
public void shouldParseTimezone() throws Exception {
MailFileParserJava parser = new MailFileParserJava();
String aestDateTime = "Thu, 03 Mar 2016 02:42:00 +1000 (AEST)";
ZonedDateTime aestZone = parser.parseDate(aestDateTime);
assertThat(aestZone.getDayOfMonth(), is(2));
assertThat(aestZone.getHour(), is(16));
}
但我的單元測試失敗的getHour()斷言 -
Expected: is <16>
but: was <15>
我不明白是怎麼回事錯的,如果我有時間上午02時42分,我減去+10小時的偏差,那麼我應該得到4:42 pm的結果(即小時是16)。
我將字符串轉換爲ZonedDateTime
或其他代碼錯誤的方式有問題嗎?
編輯:
好了,它看起來像時區轉換的東西我做忽略時間段偏移我通過,並考慮到實際的時區指定日期(即現在是白天在澳大利亞東部節省,所以真正的抵消是+1100而不是+1000)。
現在我的問題是,我如何讓Java接受我傳遞它的偏移量,而不是使用它自己的一組時區規則來執行轉換?
Your aestDateTime日期字符串錯誤。刪除'Date:'前綴。 – Andreas
對不起,這應該不會出現,我仍然有同樣的問題 – jcm
*「我如何讓Java接受偏移量我傳遞它」* @Lashane已經告訴你:**刪除符號時區名稱(AEST)** – Andreas