我想使用Jackson将一个包含日期时间信息的json字符串(如2016-07-22T11:20:48.430-07:00)取消序列化为日期时间对象,目前,我使用的是joda datetime,它运行良好,我能够将2016-07-22T11:20:48.430-07:00转换为datetime(UTC)。
然而,我想使用java8日期时间对象,有什么建议吗?localDateTime没有时区信息,zoneDateTime似乎无法处理以下格式:2016-07-22T11:20:48.430-07:00
OffsetDateTime
您的输入字符串具有与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类。请参阅问题的第一条评论。另请参阅类似问题的答案。
希望杰克逊最终能够直接处理这些类型的问题。