当前位置: 首页 > 知识库问答 >
问题:

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

胥和悌
2023-03-14

我正在尝试使用Jackson将ISO8601格式的日期反序列化为Java8java.time.instant。我向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参数被忽略,而date time formatter不知道如何在没有时区的情况下格式化一个瞬间。

有没有一种方法可以使用Jackson和JavaMemodule将不在UTC时区偏移量的ISO8601字符串反序列化到Java8Java.time.instant而不编写自定义反序列化器?

共有1个答案

莫飞翮
2023-03-14

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

@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时区偏移量的日期时间(例如)。然后,我尝试使用如下注释: 像这样: 但是,这些都不起作用,我得到一个例外: 这意味着将忽略ti

  • 问题内容: 我正在使用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'',但分析失败 到目前为止,我试图包含这种依赖关系: 还有: 但没有奏效。

  • 我刚刚根据新的(ish)Java8时间包将许多日期转换为LocalDateTime。到目前为止,我一直很喜欢这种转换,直到我开始尝试序列化和反序列化。 如何配置Jackson以支持他们?: LocalDateTime --serialize-- 这里有大量关于转换为格式化字符串的资料,但我似乎找不到utc时间戳的现成解决方案。

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

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