Spring data jpa возвращает несовместимые значения Date из oracle таблицы базы данных - PullRequest
0 голосов
/ 28 апреля 2020
  • У меня есть таблица в oracle db. Таблица содержит столбец last_updt_dt с типом данных Date.
  • Я использую данные весны jpa с версией hibernate 5.3.12 final. Класс сущности для таблицы содержит поле даты, как показано ниже

    @ Column (name = "last_updt_dt") private LocalDateTime lastUpdtDt;

  • Если я вставлю дату через свое приложение и получу это, то это показывает ожидаемое поведение. Например, в базе данных он показывает следующее значение (в 24-часовом формате)

    28-04-2020 00: 32: 02

и в приложении, если мой часовой пояс сервера равен AEST, тогда он показывает указанное выше значение как

2020-04-28T10:32:02

, что является правильным (значение ut c в дБ и значение AEST, полученные в моем приложении, совпадают правильно)

  • Но у меня есть несколько существующих записей в той же таблице базы данных. Если я пытаюсь получить эти записи, тогда в моем приложении дата показывает неправильное значение. Например, таблица базы данных показывает следующее значение (в 24-часовом формате)

    11-01-2017 09: 36: 34

и в приложении, если мой сервер часовой пояс AEST, тогда он показывает вышеуказанное значение как

2017-01-11T20:36:34

, если я конвертирую это время ut c время 09:36:34 в время AEST, то это дает мне время как 19:36:34 и то, что я вижу здесь, это 20:36:34, что на один час больше.

Итак, я не могу понять поведение:

  • Если я вставлю дату из своей весенней загрузки приложение и получить его, дата, введенная в дБ, совпадает с датой, возвращенной jpa
  • , но если я попытаюсь прочитать дату, которая не вставлена ​​моим приложением, которая уже присутствует в дБ, то дата возвращается по jpa не совпадает со значением в db, фактически показывает мне дополнительный час по сравнению с ожидаемым значением. Это происходит для всех существующих значений даты в этой таблице. (не тот, который был введен моим приложением весенней загрузки)

Кто-нибудь имеет какие-либо подсказки об этом поведении?

Мое приложение создано с использованием jhipster 6.4.1, и я заметил, что есть Класс DateTimeFormatConfiguration, содержащий следующий метод

@Override
    public void addFormatters(FormatterRegistry registry) {
        DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
        registrar.setUseIsoFormat(true);
        registrar.registerFormatters(registry);
    }

Не уверен, играет ли это какую-либо роль.

1 Ответ

0 голосов
/ 02 мая 2020

Спасибо всем за ответы. Я нашел проблему. Не было проблем с кодом / весна данных jpa / oracle / jhipster. Проблема была в моих расчетах.

Дата, которая, по моим ощущениям, не работала в соответствии с моими ожиданиями, была следующей: 11-01-2017 09: 36: 34

Эта дата ут c 11 января 2020 года. Если я конвертирую это в AEST, то получится + 11 часов, потому что это было во время дневного света. Таким образом, мое приложение показывало мне правильную дату, которая является 2017-01-11T20: 36: 34.

Дата, которая, как я чувствовал, работала нормально, это: 28-04-2020 00:32:02 Эта дата c 28 апреля 2020 года, где нет перехода на летнее время, и если я хочу преобразовать это в AEST, то я должен добавить +10 часов.

По сути, я сравнивал неправильные даты, одна была во время перехода на летнее и прочее было после того, как переход на дневное время закончился, и поэтому я получал разные результаты, и мне показалось, что мое приложение где-то не в состоянии дать мне согласованные даты и времени. Но это не так, я применял неправильные вычисления.

...