ZonedDateTime получен со сдвигом в один час в Hsqldb с 2.6.x

avatar
Stéphane Traumat
1 июля 2021 в 21:10
61
0
0

Я использую 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"/>
Источник
Stéphane Traumat
2 июля 2021 в 09:34
0

Кажется, мне не удалось заставить скрипт вставки hsqldb (бросить ликвидную базу) иметь тот же часовой пояс, что и мои тесты

fredt
3 июля 2021 в 16:04
0

TIMESTAMP WITH TIME ZONE эквивалентен OffsetDateTime. Я не знаю, как JPA преобразует значения обратно из OffsetDateTime в ZonedDateTime, но это невозможно сделать правильно без сопоставления смещения зоны и имени зоны для данной метки времени.

Ответы (0)