gpt4 book ai didi

java - 为什么在带有 Java 8 日期的 Jackson 的 ObjectMapper 中使用 dateFormat 时不从 JSON 中排除毫秒?

转载 作者:搜寻专家 更新时间:2023-11-01 01:59:57 25 4
gpt4 key购买 nike

我想弄清楚为什么 Jackson (2.9.5) 格式错误地来自 Java 8。

data class Test(
val zonedDateTim: ZonedDateTime = ZonedDateTime.now(),
val offsetDateTim: OffsetDateTime = OffsetDateTime.now(),
val date: Date = Date(),
val localDateTime: LocalDateTime = LocalDateTime.now()
)

val mapper = ObjectMapper().apply {
registerModule(KotlinModule())
registerModule(JavaTimeModule())
dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
enable(SerializationFeature.INDENT_OUTPUT)
}

println(mapper.writeValueAsString(Test()))

根据我提供的日期格式,我希望得到没有毫秒的日期格式,但结果如下所示:

{
"zonedDateTim" : "2018-07-27T13:18:26.452+02:00",
"offsetDateTim" : "2018-07-27T13:18:26.452+02:00",
"date" : "2018-07-27T13:18:26",
"localDateTime" : "2018-07-27T13:18:26.452"
}

为什么格式化日期中包含毫秒?

最佳答案

dateFormat 仅适用于 Date 对象 - 其他 3 个对象由 JavaTimeModule 处理,默认情况下使用 ISO 格式。

如果你想要不同的格式,你可以使用:

val format = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");

val javaTimeModule = JavaTimeModule();
javaTimeModule.addSerializer(LocalDateTime.class, LocalDateTimeSerializer(format));
javaTimeModule.addSerializer(ZonedDateTime.class, ZonedDateTimeSerializer(format));
mapper.registerModule(javaTimeModule);

您可能还需要添加 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); 但我不能 100% 确定这是必要的。

另请注意,使用该格式,您将丢失时区和偏移量信息。因此,您可能需要 Offset/Zoned-DateTimes 的不同格式。

关于java - 为什么在带有 Java 8 日期的 Jackson 的 ObjectMapper 中使用 dateFormat 时不从 JSON 中排除毫秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51557009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com