当前位置: 首页 > 面试题库 >

Jackson将ISO8601格式的日期时间反序列化为Java8 Instant

麹鸿煊
2023-03-14
问题内容

我正在尝试java.time.Instant使用Jackson 将ISO8601格式的日期反序列化为Java8
。我向ObjectMapper注册了JavaTimeModule,并关闭了该WRITE_DATES_AS_TIMESTAMPS设置。

但是,如果尝试反序列化2016-03-28T19:00:00.000+01:00,它将无法正常工作,因为JavaTimeModule似乎只会反序列化具有UTC时区偏移量的日期时间(例如2016-03-28T18:00:00.000Z)。然后,我尝试使用如下@JsonFormat注释:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "UTC")

像这样:

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = JsonFormat.DEFAULT_TIMEZONE)

但是,这些都不起作用,我得到一个例外:

com.fasterxml.jackson.databind.JsonMappingException: Unsupported field: YearOfEra (through reference chain: org.example.Article["date"])

这意味着将忽略timezone参数,并且日期时间格式化程序不知道如何格式化没有时区的Instant。

有没有一种方法可以java.time.Instant使用Jackson和JavaTimeModule反序列化不在UTC时区偏移量到Java
8的ISO8601字符串,而无需编写自定义反序列化器?


问题答案:

您需要通过XXX在您的modell类中设置显式时区:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX")

(请参阅:https
:
//docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)



 类似资料:
  • 我正在尝试使用Jackson将ISO8601格式的日期反序列化为Java8。我向ObjectMapper注册了JavaTimeModule,并关闭了设置。 但是,如果试图反序列化将不起作用,因为JavaTimeModule似乎只会反序列化使用UTC时区偏移量格式化的日期时间(例如)。然后我尝试使用注释,如下所示: 就像这样: 然而,这两种方法都不起作用,我得到了一个例外: 这意味着timezone

  • 因此,有一个关于web应用程序的部分,用户可以向其中输入事件,web服务将这些事件以以下格式发送到移动应用程序: 我在尝试将字符串转换为日期时遇到了问题,这样我就可以从事件中获得时间(也可以在正确的时区中格式化),例如,这里有一个出现在“2015-03-20T20:00:00-07:00”上的字符串,当我拉动时,时间应该是太平洋时间1PM。但我得到的不是8PM就是3AM(这取决于我是否将UTC缩写

  • 问题内容: 我正在使用bootstrap-datetimepicker和ISO8601 datetime格式,如其选项部分所述 在我的控制器中 它以(console.log)将数据发送到后端 并保存为数据库 在我的模板中 我在HTML上看到的输出为 但是根据Angular doc,它应该用于格式 我想念的是什么? 问题答案: 现在,我已经创建了一个过滤器 作为依赖项添加为 并用作 并将日期显示为

  • 无法从字符串“1979-12-05T08:00Z”反序列化java.util.Date类型的值:无效表示(错误:无法分析日期值“1979-12-05T08:00Z”:无法分析日期“1979-12-05T08:00.000Z”:虽然它似乎符合格式“yyyy-mm-dd't'hh:mm:ss.sss'z'',但分析失败 到目前为止,我试图包含这种依赖关系: 还有: 但没有奏效。

  • 问题内容: 我需要使用Jackson将反序列化格式为 2016-11-28T10:34:25.097Z的 时间反序列化为Java8的ZonedDateTime。 我相信我已经正确配置了ObjectMapper(一种工厂方法): 我在DTO的代码中有一个字段 当我尝试用杰克逊解析它时,我得到 没有@JsonFormat的问题仍然存在。 我怎么可能克服呢? 问题答案: 问题可能出在模式中的“ Z”。日