|
Timestamp with time zone bug?
|
|||
---|---|---|---|
#18+
Окружение БД: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production (dbtimezone = +00:00), стоит отдельно от клиента. Java клиента: 1.8.0_201 ОС клиента: Windows 10 Зона клиента: MSK Стек технологий: org.springframework.boot:spring-boot-starter-parent:2.2.7.RELEASE spring-boot-starter-data-jpa org.hibernate:hibernate-core com.oracle.jdbc:ojdbc8:18.3.0.0 Описание проблемы №1: В Oracle в колонки с типом timestamp with local time zone и timestamp with time zone сохраняются две даты 2005-10-30T02:00+04:00[Europe/Moscow] и 2005-10-30T02:00+03:00[Europe/Moscow] (2 часа по летнему времени и 2 часа по зимнему времени – перевод часов). Сначала одна в обе колонки, затем другая. Описанное ниже справедливо как для типа OffsetDateTime так и для ZonedDateTime. В итоге ОБЕ даты в БД выглядят одинаково. В столбце с типом with local time zone отображается значение 2005-10-29 23:00:00.000000. В столбце с типом with time zone отображается значение 2005-10-30 02:00:00.000000 +04:00. Другими словами, две разные даты после сохранения в Oracle имеют в БД одно значение. Обе даты после вычитки из БД имеют следующее представление в Java: для OffsetDateTime: 2005-10-30T02:00+03:00 для ZonedDateTime: 2005-10-30T02:00+03:00[Europe/Moscow] Вопрос: почему две резные даты (2 часа по летнему и 2 часа по зимнему времени) в Oracle имеют одинаковое представление? Замечено, что дата 2005-10-30T03:00+03:00[Europe/Moscow] сохраняется корректно и имеет следующее представление в БД: в столбце с типом with local time zone отображается значение 2005-10-30 00:00:00.000000, в столбце с типом with time zone отображается значение 2005-10-30 03:00:00.000000 +03:00 Описание проблемы №2 Если в настройках программы выставить параметр: spring.jpa.properties.hibernate.jdbc.time_zone=UTC При том, что системная зона клиента МСК, то те же даты в Oracle будут иметь следующее представление: в столбце с типом with local time zone отображаются значения: 2005-10-29 18:00:00.000000 и 2005-10-29 19:00:00.000000 соответственно. в столбце с типом with time zone отображаются значения 2005-10-29 22:00:00.000000 +04:00 и 2005-10-29 23:00:00.000000 +04:00 соответственно. Т.е. время было приведено к UTC, но информация о зоне сохранилась. В результате смещение зоны было вычтено дважды, что видно по столбцу с типом timestamp with local time zone. P.S. В PostgreSql не возникает проблем при сохранении и чтении этих же дат. По этой причине предполагаю, что проблема именно в Oracle и/или его JDBC драйвере. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2020, 14:39 |
|
Timestamp with time zone bug?
|
|||
---|---|---|---|
#18+
avang В Oracle в колонки с типом timestamp with local time zone и timestamp with time zone сохраняются две даты 2005-10-30T02:00+04:00[Europe/Moscow] и 2005-10-30T02:00+03:00[Europe/Moscow] Начните с простого. Что конкретно означают Ваши даты? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2020, 17:52 |
|
Timestamp with time zone bug?
|
|||
---|---|---|---|
#18+
andrey_anonymous, andrey_anonymousЧто конкретно означают Ваши даты? Я чрез hibernate и тип ZonedDateTime (OffsetDateTime) сохранил в БД Oracle две даты. Первая 2005-10-30T02:00+04:00 - два часа ночи по летнему времени, вторая 2005-10-30T02:00+03:00 - два часа ночи по зимнему времени (после перевода стрелок на час назад). Потом сделал select к таблице в которую сохранил даты. Таблица создана скриптом: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
В первые колонки сохранялся OffsetDateTime, во вторые ZonedDateTime. Одна запись в БД - одна дата во всех колонках. Запрос к таблице: Код: plsql 1.
В итоге получаю следующий результат: Код: plsql 1. 2.
Данные выводятся в порядке объявления полей в таблице tmp. Как можно заметить данные не отличаются. В Java даты создаю следующим образом: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2020, 15:35 |
|
|
start [/forum/topic.php?fid=52&fpage=29&tid=1880601]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 126ms |
0 / 0 |