【发布时间】:2020-03-19 09:08:13
【问题描述】:
我正在使用 JSON-B(yasson 实现)并且我正在接收具有这样字段的对象的数据
{
...
"timestamp": "2020-03-19T06:42:42Z",
...
}
对于 UTC 日期时间值,这是完全标准的 ISO 8601。现在对应的 Java 类只声明了一个 Date 成员变量,没有其他特定的注解
...
private Date timestamp;
...
一切似乎都运行良好,看起来 JSON-B 实现正确理解为 UTC,而无需我使用 @JsonbDateFormat 注释指定格式。我想我很确定,因为我检查过
ZonedDateTime datetimeCheck = ZonedDateTime.of(2020, 3, 19, 6, 42, 42, 0, ZoneId.of("UTC"));
Date parsedDateFromJson = myModel.getTimestamp();
boolean compareTs = parsedDateFromJson.equals(Date.from(datetimeCheck.toInstant()));
它产生 true 但是,当我运行另一个测试时,从日期时间值中删除“Z”,我期望它产生不同的结果,将日期时间值解释为本地而不是比UTC。令我大吃一惊的是,JSON-B 得到的 Date 对象是完全一样的。 我在这里想念什么?为什么 2020-03-19T06:42:42Z 和 2020-03-19T06:42:42 是同一个东西? (我不认为他们是)。或者当没有指定时区时,JSON-B 实现是否总是将 UTC 视为默认值?
谢谢
【问题讨论】:
-
好的。你是如何配置你的 JSON-B 实现的?我问是因为我无法将
2020-08-047T19:07:41Z和2020-08-047T19:07:41绑定到java.util.Date吗?我的失败与前者。
标签: java json datetime jsonb-api yasson