我從字符串解析ZoneOffset的兩個對象。我如何總結它們並應用於ZonedDateTime?我如何總結兩個ZoneOffset?
例如:
原來ZonedDateTime是2017-12-27T18:30:00
,第一偏移是+03
,第二偏移+05
我怎樣才能得到的2017-12-28T18:30:00+08:00
或2017-12-28T10:30:00
輸出?
我從字符串解析ZoneOffset的兩個對象。我如何總結它們並應用於ZonedDateTime?我如何總結兩個ZoneOffset?
例如:
原來ZonedDateTime是2017-12-27T18:30:00
,第一偏移是+03
,第二偏移+05
我怎樣才能得到的2017-12-28T18:30:00+08:00
或2017-12-28T10:30:00
輸出?
我這樣理解你的問題(請檢查是否正確):你有一個ZonedDateTime
與通常的UTC偏移量。我會稱之爲dateTimeWithBaseOffset
。你已經有了另一ZonedDateTime
與偏移相對於前ZonedDateTime
的偏移。這真的是不正確的;該班級的設計者決定偏移量來自UTC,但有人用它與預期的不同。我會打電話給後者dateTimeWithOffsetFromBase
。
當然最好,如果你能解決這個問題產生dateTimeWithOffsetFromBase
與非正統偏移的代碼。我假設現在這不會是你可以使用的解決方案。因此,您需要將不正確的偏移量更正爲UTC的偏移量。
它不壞:
ZoneOffset baseOffset = dateTimeWithBaseOffset.getOffset();
ZoneOffset additionalOffset = dateTimeWithOffsetFromBase.getOffset();
ZoneOffset correctedOffset = ZoneOffset.ofTotalSeconds(baseOffset.getTotalSeconds()
+ additionalOffset.getTotalSeconds());
OffsetDateTime correctedDateTime = dateTimeWithOffsetFromBase.toOffsetDateTime()
.withOffsetSameLocal(correctedOffset);
System.out.println(correctedDateTime);
使用您的樣本日期時間這個打印
2017-12-28T18:30+08:00
如果你想在UTC時間:
correctedDateTime = correctedDateTime.withOffsetSameInstant(ZoneOffset.UTC);
System.out.println(correctedDateTime);
這將打印的日期時間你問:
2017-12-28T10:30Z
對於具有偏移量的日期時間,我們不需要使用ZonedDateTime
,OffsetDateTime
可以做的事情,並且可以更好地向讀者溝通我們所達成的目標(儘管如此,ZonedDateTime
也可以)。
謝謝你的回答! – San
這沒有任何邏輯意義,不是嗎?加上區域似乎不正確,你爲什麼要這麼做? – luk2302
我有數據陣列與偏移量不是指GMT + 0,I必須以某種方式處理它。 – San
不過,這沒有任何意義。唯一合理的做法是*在時區之間轉換*日期。但+03 +05導致+08缺乏任何意義。 – luk2302