Я использую Spring boot и JPA, и мой объект домена Order имеет это поле:
@Column(name = "TIMESTAMP")
private ZonedDateTime timestamp;
Я создаю дату с помощью этого метода:
protected static ZonedDateTime createZonedDateTime(final String date) {
LocalDateTime ldt = LocalDateTime.parse(date + " 00:00", DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm"));
return ldt.atZone(ZoneId.systemDefault());
}
Когда я вставляю это в базу данных, выбрасывая JPA, с showsql в true, я вижу, что вставленная дата: [2020-01-01T00:00+01:00[Europe/Paris]]
когда я получаю данные из репозитория JPA, я получаю следующую дату: 2020-01-01T01:00+01:00[Europe/Paris]
Почему у меня часовая смена? Он не работает, так как hsqldb 2.6.0
. Отлично работает с 2.5.0
.
Я использую Liquidbase для создания поля с:
<column name="TIMESTAMP" type="TIMESTAMP WITH TIME ZONE"
remarks="The timestamp of the order"/>
Кажется, мне не удалось заставить скрипт вставки hsqldb (бросить ликвидную базу) иметь тот же часовой пояс, что и мои тесты
TIMESTAMP WITH TIME ZONE эквивалентен OffsetDateTime. Я не знаю, как JPA преобразует значения обратно из OffsetDateTime в ZonedDateTime, но это невозможно сделать правильно без сопоставления смещения зоны и имени зоны для данной метки времени.