Spring JSON 转换器将日期格式"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"转换为偏移日期时间而不带偏移量



我一直在" yyyy-mm-dd'hh:mm:ss.ssssxxx"格式中接收到日期,从json输入中,该格式在弹簧上会在spring it it self中转换为dto。但是,当转换为OffsetDateTime实例时,这会丢失有关创建的OffSetDateTime实例中有关偏移的信息。例如,我们在邮递员调用API中传递,这会导致解析和对象得到创建,但是该对象没有偏移设置。

以下是"2019-03-21T06:43:56.235+11:00"分析日期的示例,该日期在使用OffSetDateTime实例的日期中导致日期,但没有+11:00作为偏移。当我使用DateTimeFormatter直接解析此字符串时,我就能获得填充填充物。

以下是使用DateTimeFormatter的代码。

OffsetDateTime.parse(offSetDateTimeString, DateTimeFormatter.ofPattern(DATE_PATTERN))

DATE_PATTER = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX"

请指导。

谢谢。

update

我的做有以下对象:

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String name;
// THis won't work as it doesn't support timestamp.
// @Column(columnDefinition = "TIMESTAMP WITH TIME ZONE")
// private LocalDateTime localDateTime;
@Column(columnDefinition = "TIMESTAMP WITH TIME ZONE")
private ZonedDateTime zonedDateTime;
@Column(columnDefinition = "TIMESTAMP WITH TIME ZONE")
private OffsetDateTime offSetDateTime;

DTO也具有相同的数据类型的相同字段。

好吧,这是我为解决这个问题所做的。

  1. 我不接受DTO中的OffsetDateTime,而是接受了字符串。为此,我需要在映射器(MapStruct)中进行更改。我将自定义字符串定义为OffsetDateTime映射类,并在@Mapper中的uses中指定了它们。
  2. 这解决了我的解析相关问题,然后转到DB,我注意到了几件事。

    1. 时间戳记与时区未以确切的给定格式存储日期。
    2. 您需要使用ZoneID将时间转换为适当的时区。您必须为这种转换编写自定义实用程序。
    3. 我们现在需要获取相关的时区的Zoneid对象,我们目前已经从传入请求获得。

这是现在的更新。发布此内容以供其他人参考。谢谢大家的指导。

最新更新