2017-12-27 946 views
-2

我從字符串解析ZoneOffset的兩個對象。我如何總結它們並應用於ZonedDateTime我如何總結兩個ZoneOffset?

例如:
原來ZonedDateTime是2017-12-27T18:30:00,第一偏移是+03,第二偏移+05

我怎樣才能得到的2017-12-28T18:30:00+08:002017-12-28T10:30:00輸出?

+3

這沒有任何邏輯意義,不是嗎?加上區域似乎不正確,你爲什麼要這麼做? – luk2302

+0

我有數據陣列與偏移量不是指GMT + 0,I必須以某種方式處理它。 – San

+3

不過,這沒有任何意義。唯一合理的做法是*在時區之間轉換*日期。但+03 +05導致+08缺乏任何意義。 – luk2302

回答

2

我這樣理解你的問題(請檢查是否正確):你有一個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也可以)。

+0

謝謝你的回答! – San