@JsonFormat конвертирует дату с неправильным часовым поясом - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть простой POJO с полем Date с начальным значением:

1985-09-17T01:00:00.000+0400

, тогда это значение Date сопоставляется с DTO с Date поле аннотировано:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssX")
private Date dateOfBirth;

Затем отображается результат:

1985-09-16T21:00:00Z

Я попытался установить свойство timestamp в @JsonFormat, но это не такt справка и дата по-прежнему недействительна.

Как правильно преобразовать дату?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Обе даты представляют один и тот же момент времени:

  • 1985-09-17T01: 00: 00.000 + 0400
  • 1985-09-16T21: 00: 00Z

Когда вы печатаете даты в java, он использует текущий часовой пояс виртуальной машины, но внутри класса Date эта информация хранится в long, представляющем время в миллисекундах с начала эпохи.

Есливам нравится, что вы можете получить строковое представление даты, используя пользовательский часовой пояс, используя setTimeZone метод DateFormat:

Устанавливает часовой пояс для календаряэтот объект DateFormat.

Вот простой фрагмент кода:

Date date = ...
DateFormat formatter = ...
TimeZone timeZone = ...

// Set a custom timezone
formatter.setTimeZone(timeZone);

// Get a string representation of the daet with a custom timezone
String formattedDateWithCustomTimezone = formatter.format(date);
0 голосов
/ 11 декабря 2018

Значение в пределах java.util.Date - это количество миллисекунд, прошедших с эпохи Unix, которая произошла в полночь 1 января 1970 года по UTC.Так как это число в миллисекундах с фиксированной эпохи, значение в java.util.Date одинаково во всем мире в любой конкретный момент времени, независимо от местного часового пояса.

Так что в вашем случае лучше использовать ZonedDateTime класс, если вы используете Java 8 ZonedDateTime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...