在Java 8中,如何使用时区序列化/反序列化日期时间信息

时间:2016-07-27 01:11:04

标签: json datetime jackson

我想用日期时间信息(例如2016-07-22T11:20:48.430-07:00)将json字符串用于使用Jackson来保存日期时间对象,目前,我正在使用joda Datetime,它工作正常,我能够将2016-07-22T11:20:48.430-07:00转换为日期时间(UTC)。

但是,我想使用java 8日期时间对象,任何推荐? localDateTime没有时区信息,而且zoneDateTime似乎无法处理如下格式:2016-07-22T11:20:48.430-07:00

1 个答案:

答案 0 :(得分:1)

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();

适配器库

我自己并不使用Jackson,但我知道你可以使用各种适配器类来处理java.time类。请参阅有关问题的第一条评论。有关另一个问题的类似问题,请参阅this Answer

希望杰克逊最终能够现代化直接处理这些类型。