Java Jsonb在ISO8601中反序列化UTC日期时间

Java Jsonb在ISO8601中反序列化UTC日期时间,java,json,datetime,jsonb-api,yasson,Java,Json,Datetime,Jsonb Api,Yasson,我正在使用JSON-B(yasson实现),并且我正在接收一个具有如下字段的对象的数据 { ... "timestamp": "2020-03-19T06:42:42Z", ... } 这是UTC日期时间值的标准ISO 8601。现在,相应的Java类只声明了一个日期成员变量,没有其他特定的注释 ... private Date timestamp; ... 一切似乎都很正常,JSON-B实现似乎正确地理解了UTC,而无需使用@JsonbDateFormat注释指定格式。我想我

我正在使用JSON-B(yasson实现),并且我正在接收一个具有如下字段的对象的数据

{
  ...
  "timestamp": "2020-03-19T06:42:42Z",
  ...
}
这是UTC日期时间值的标准ISO 8601。现在,相应的Java类只声明了一个日期成员变量,没有其他特定的注释

...
 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获得的日期对象完全相同。 我错过了什么?为什么2020-03-19T06:42:42Z2020-03-19T06:42:42是同一件事?(我认为他们不是)。或者,JSON-B实现在未指定时区的情况下是否始终将UTC视为默认值

谢谢

或者,JSON-B实现在未指定时区的情况下是否始终将UTC视为默认值

就是这个。与它的名字所暗示的相反,
java.util.Date
实际上并不表示日期,而是表示时间上的一个瞬间。具体来说,它表示自UNIX纪元(1970年1月1日,00:00:00 GMT)以来的毫秒数

2020-03-19T06:42:42
是一个没有区域或偏移信息的日期+时间。将此日期+时间反序列化为
java.util.date
,即时间上的一个瞬间时,需要决定如何解释日期+时间。这是UTC的日期+时间吗?这是当地时区的日期+时间吗

幸运的是,JSON-B规范包含以下内容:“如果本节未另行规定,则使用UTC格林威治标准时区和从UTC格林威治指定的偏移量。”正如这句话所示,作者选择将不带时区的日期+时间解释为UTC的日期+时间

或者,JSON-B实现在未指定时区的情况下是否始终将UTC视为默认值

就是这个。与它的名字所暗示的相反,
java.util.Date
实际上并不表示日期,而是表示时间上的一个瞬间。具体来说,它表示自UNIX纪元(1970年1月1日,00:00:00 GMT)以来的毫秒数

2020-03-19T06:42:42
是一个没有区域或偏移信息的日期+时间。将此日期+时间反序列化为
java.util.date
,即时间上的一个瞬间时,需要决定如何解释日期+时间。这是UTC的日期+时间吗?这是当地时区的日期+时间吗


幸运的是,JSON-B规范包含以下内容:“如果本节中未另行规定,则使用从UTC格林威治指定的GMT标准时区和偏移量。”如该语句所示,作者选择将不带时区的日期+时间解释为UTC的日期+时间。

谢谢,我错过了规范中的这一部分。您能提供您阅读它的确切位置吗?非常感谢。我认为这是一个重要的部分,它应该更加清晰可见。规范保存在GitHub上,您可以在以下位置找到确切的句子:谢谢,我错过了规范中的这一部分。您能提供您阅读该规范的确切位置吗?非常感谢。我认为这是一个重要的部分,它应该更加可见和清晰。规范在GitHub上维护,您可以在下面找到确切的句子:Ok。您是如何配置JSON-B实现的?我这样问是因为我不能同时将
2020-08-047T19:07:41Z
2020-08-047T19:07:41
绑定到
java.util.Date
?我的和前者不一样。您是如何配置JSON-B实现的?我这样问是因为我不能同时将
2020-08-047T19:07:41Z
2020-08-047T19:07:41
绑定到
java.util.Date
?我的比前者差。