java - 从日期格式中排除毫秒(jackson + java 8 日期)
问题描述
我试图弄清楚为什么杰克逊(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% 确定它是必要的。
另请注意,使用该格式,您将丢失时区和偏移信息。因此,您可能需要不同的偏移/分区日期时间格式。
推荐阅读
- mysql - mysql:为什么我需要 AttributeConverter over enum 将具有枚举数据类型的 DB 列映射为枚举与 JPA 实体?
- javascript - 为什么我的计数器功能没有增加?
- c++ - 如果有std::barrier,为什么要std::latch?
- list - 更惯用的方式来初始化这个 kotlin 列表?
- android - 奥利奥升级后闹钟响起时出现系统 UI 错误
- c# - Google Drive API v3 不包括 Google 照片
- django - 如何将字符串拆分为 int 和 bytestring 文字
- utf-8 - Webkit 突然开始提供不同编码的脚本?
- sql - SQl file handling class or library in asp.net
- sql - 如何将多行合并为一行