2016-07-27 243 views
1

我想deserilize日期時間信息如日期時間信息,如2016-07-22T11:20:48.430-07:00的日期時間對象使用傑克遜,目前,我使用約達日期時間,它工作正常,我能夠將2016-07-22T11:20:48.430-07:00轉換爲日期時間(UTC)。在Java 8,如何序列化/反序列化日期時間信息與時區

不過,我想用java 8的日期時間對象,有什麼建議嗎? localDateTime沒有時區信息,並zoneDateTime似乎不能夠處理類似格式:2016-07-22T11:20:48.430-07:00

+0

https://github.com/FasterXML/jackson-datatype-jsr310 – shmosel

+0

術語:該輸入具有[來自UTC的偏移](https://en.m.wikipedia.org/wiki/UTC_offset)不是一個時區。時區是一個偏移*加*一組處理異常情況(如夏令時(DST))的規則。 –

回答

0

OffsetDateTime

你輸入字符串有一個offset-from-UTC不是時區。時區是偏移量用於處理異常情況(如夏令時(DST))的一組規則。

對於具有偏移量的日期時間值,請使用恰當命名的OffsetDateTime類。

OffsetDateTime odt = OffsetDateTime.parse("2016-07-22T11:20:48.430-07:00"); 

如果需要,您可以應用全時區。

ZoneId zoneId = ZoneId.of("Europe/Paris"); 
ZonedDateTime zdt = odt.atZone(zoneId); 

對於UTC值,請提取一個Instant

Instant instant = odt.toInstant(); 

適配器庫

我不使用傑克遜自己,但我知道你可以使用各種適配器類來處理java.time類。查看關於該問題的第一條評論。有關另一個類似問題,請參閱this Answer

希望傑克遜最終將被現代化直接處理這些類型。