我有一个带有 Date 字段的简单POJO,其初始值为:
1985-09-17T01:00:00.000+0400
然后将此日期值映射到带有注释的 Date 字段的DTO:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssX")
private Date dateOfBirth;
然后显示结果:
1985-09-16T21:00:00Z
我尝试在@JsonFormat
中设置 timestamp 属性,但这没有帮助,日期仍然无效。
如何正确转换日期?
答案 0 :(得分:4)
java.util.Date
中的值是自Unix纪元以来的毫秒数,该纪元发生在UTC的1970年1月1日午夜。由于距固定时间段以来的毫秒数,java.util.Date
中的值在世界各地在任何特定时刻都是相同的,而与本地时区无关。
因此,如果您使用Java 8 ZonedDateTime
,则最好使用ZonedDateTime
类
答案 1 :(得分:2)
两个日期都代表同一时刻:
当您在Java中打印日期时,它使用VM的当前时区,但是在内部,Date
类将该信息存储在long
中,表示自纪元以来的时间(以毫秒为单位)。
如果愿意,可以使用DateFormat
的{{3}}方法使用自定义时区来获取日期的字符串表示形式:
设置此DateFormat对象的日历的时区。
这是一个简单的代码段:
Date date = ...
DateFormat formatter = ...
TimeZone timeZone = ...
// Set a custom timezone
formatter.setTimeZone(timeZone);
// Get a string representation of the daet with a custom timezone
String formattedDateWithCustomTimezone = formatter.format(date);