【发布时间】:2020-03-06 12:12:32
【问题描述】:
jsonb 对 java api 的各种日期对象默认使用的日期/时间格式是什么?
例如,javascript 的 new Date().toJSON() 生成的输出包含我期望使用 Jsonb 解析为 ZonedDateTime 字段的第二个分数,但默认序列化程序不支持第二个分数。
我是否必须指定自定义格式来映射 javascript Date?
【问题讨论】:
jsonb 对 java api 的各种日期对象默认使用的日期/时间格式是什么?
例如,javascript 的 new Date().toJSON() 生成的输出包含我期望使用 Jsonb 解析为 ZonedDateTime 字段的第二个分数,但默认序列化程序不支持第二个分数。
我是否必须指定自定义格式来映射 javascript Date?
【问题讨论】:
Jsonb spec 指定了第 3.5 节中应支持的默认映射实现日期:
实现必须支持以下标准 Java 日期/时间类的绑定:
- java.util.Date
- java.util.Calendar
- java.util.GregorianCalendar
- java.util.TimeZone
- java.util.SimpleTimeZone
- java.time.Instant
- java.time.Duration
- java.time.Period
- java.time.LocalDate
- java.time.LocalTime
- java.time.LocalDateTime
- java.time.ZonedDateTime
- java.time.ZoneId
- java.time.ZoneOffset
- java.time.OffsetDateTime
- java.time.OffsetTime
javaindeed article 列出了用于它们的各种格式化程序以及示例输出:
{
"date": "2016-07-27T23:07:41",
"calendar": "2016-07-27T23:07:41.782+02:00[Europe/Copenhagen]",
"gregorianCalendar": "2016-07-27T23:07:41.801+02:00[Europe/Copenhagen]",
"timeZone": "Europe/Copenhagen",
"simpleTimeZone": "Europe/Paris",
"instant": "2016-07-27T21:07:41.806Z",
"duration": "PT96H",
"period": "P3M",
"localDate": "2016-07-27",
"localTime": "23:07:41.807",
"localDateTime": "2016-07-27T23:07:41.807",
"zonedDateTime": "2016-07-27T23:07:41.807+02:00[Europe/Copenhagen]",
"zoneId": "Europe/Copenhagen",
"zoneOffset": "+03:30",
"offsetDateTime": "2016-07-27T23:07:41.807+02:00",
"offsetTime": "23:07:41.807+02:00",
}
在我的例子中,java.time.Instant 实例将从 javascript 的 Date.toJSON() 输出字符串中正确反序列化。
【讨论】: