我一直在" 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也具有相同的数据类型的相同字段。
好吧,这是我为解决这个问题所做的。
- 我不接受DTO中的OffsetDateTime,而是接受了字符串。为此,我需要在映射器(
MapStruct
)中进行更改。我将自定义字符串定义为OffsetDateTime映射类,并在@Mapper
中的uses
中指定了它们。 -
这解决了我的解析相关问题,然后转到DB,我注意到了几件事。
- 时间戳记与时区未以确切的给定格式存储日期。
- 您需要使用ZoneID将时间转换为适当的时区。您必须为这种转换编写自定义实用程序。
- 我们现在需要获取相关的时区的Zoneid对象,我们目前已经从传入请求获得。
这是现在的更新。发布此内容以供其他人参考。谢谢大家的指导。