Spring Boot @日期时间格式(模式=“yyyy-MM-dd HH:mm:ss”)不起作用

nkoocmlb  于 2022-11-05  发布在  Spring
关注(0)|答案(2)|浏览(139)

我收到了一个字符串格式的JSON,我使用Gson库将其转换为Java对象类。在该JSON中,DateTime字段用**@DateTimeFormat(pattern =“yyyy-MM-dd HH:mm:ss”)注解,原始日期格式为“creationDate”:“2022-10- 25 T10:38:32.000+01:00”在将JSON转换为Java对象类之后,DateTime字段的格式更改为Tue Oct 25 15:08:32 IST 2022**,而不是将其转换为所需的格式。

@Data
public class Root{
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    public Date creationDate;}

下面是一个如何将字符串转换为Java对象类的示例

String fileContent = Files.readString(Path.of"**Path of the file**"));
        Root root = new Gson().fromJson(fileContent, Root.class);

JSON示例:

root{
"creationDate":"2022-10-25T10:38:32.000+01:00"
}

我不明白为什么会发生这种情况。我知道我可以使用新的SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”)转换它。parse(sDate 1)但我想知道为什么@annotation不起作用

chhqkbe1

chhqkbe11#

您可以在日期字段上尝试以下Jackson注解来格式化日期:-

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss.SSSX")
hgqdbh6s

hgqdbh6s2#

Date(旧的过时样式)、LocalDateTimeZonedDateTime不具有固有格式。
System.out.println(new Date());中使用的Date的toString()给出了您看到的格式。
“2022-10- 25 T10:38:32.000+01:00”是ISO标准格式,T表示时间部分的开始。它是OffsetDateTime的格式,仍然与区域设置(国家/地区)无关,并且不处理夏令时。ZonedDateTime会更好。

OffsetDateTime t = OffsetDateTime.parse("2022-10-25T10:38:32.000+01:00");
ZonedDateTime zt = t.toZonedDateTime(); // Default zone
Date d = Date.fromInstant(t.toInstant());

对于其他格式变体,您可以使用DateTimeFormatter

相关问题