首页 > 解决方案 > @JsonFormat 使用不正确的时区转换日期

问题描述

我有一个带有初始值的日期字段的简单 POJO:

1985-09-17T01:00:00.000+0400

然后这个 Date 值被映射到一个 DTO 并带有注释的Date字段:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssX")
private Date dateOfBirth;

然后显示结果:

1985-09-16T21:00:00Z

我尝试在 中设置时间戳属性@JsonFormat,但这没有帮助,日期仍然无效。

如何正确转换日期?

标签: javajsondatetimejackson

解决方案


a 中的值java.util.Date是自 Unix 纪元以来的毫秒数,该纪元发生在 UTC 时间 1970 年 1 月 1 日午夜。由于自固定纪元以来的毫秒数,因此java.util.Date无论本地时区如何,在任何特定时刻,全球范围内的值都是相同的。

因此,在您的情况下,ZonedDateTime如果您使用 java 8 ZonedDateTime ,最好使用 class


推荐阅读