Я использую JSON -B (реализация yasson), и я получаю данные для объекта с таким полем, как это
{
...
"timestamp": "2020-03-19T06:42:42Z",
...
}
, которое является совершенно стандартным ISO 8601 для UT C дата-время. Теперь соответствующий класс Java просто объявляет переменную-член Date без каких-либо других указаний c
...
private Date timestamp;
...
все выглядит нормально, и похоже, что реализация JSON -B правильно понимает, что как UT C без необходимости указания формата с помощью аннотации @ 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' из значения даты и времени, которое я ожидал, что он даст другой результат, интерпретируя значение даты и времени как локальное, а не как UT C. К моему большому удивлению, объект Date, полученный с помощью JSON -B, был точно таким же. Что мне здесь не хватает? Почему 2020-03-19T06: 42: 42Z и 2020-03-19T06: 42: 42 - это одно и то же? (Я не думаю, что они). Или, может быть, реализация JSON -B рассматривает UT C по умолчанию всегда, когда часовой пояс не указан?
Спасибо