|
|
|
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Разбирался с проблемой при вставке дат в Oracle через JDBC стандартного драйвера от Oracle - существуют определённые corner cases - когда времени, содержащегося в java.sql.Timestamp не существует, т.е. время потерянное при переходе в Daylight Saving Time, например с 2 до 3 часов ночи в день перевода часов вперёд весной. При тестировании обнаружилось, что в зависимости от используемой версии JDBC драйвера результат различается - записанное время в базе может отличаться (на 1 час) или не отличатся от поставленного в java.sql.Timestamp. Тестируемая база, код, версия Java одни и те же - различные были только JDBC драйверы. Как я выяснил, в Oracle содержатся файлы с информацией по изменениям Daylight Saving Time для разных Timezones, но мне не понятно как работает JDBC driver - в нём самом ничего похожего на справочник по Daylight Saving Time/Timezones я не нашёл. Неужели драйвер запрашивает базу о Daylight Saving Time? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2018, 21:58 |
|
||
|
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
|
|||
|---|---|---|---|
|
#18+
IgorMpкак работает JDBC driverВ стандартном java.sql нет таймстапа с таймзоной, мапинг на sql-ный timestamp with time zone не предусмотрен и, соответсвенно, нет проблем с переходом на зимнее/летнее время. Оракловый oracle.sql.TIMESTAMPTZ поддерживает тайм зону и что в нее запишешь, то и будет передаваться при окммуникациях с БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2018, 22:32 |
|
||
|
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
|
|||
|---|---|---|---|
|
#18+
-2-IgorMpкак работает JDBC driverВ стандартном java.sql нет таймстапа с таймзоной, мапинг на sql-ный timestamp with time zone не предусмотрен и, соответсвенно, нет проблем с переходом на зимнее/летнее время. Оракловый oracle.sql.TIMESTAMPTZ поддерживает тайм зону и что в нее запишешь, то и будет передаваться при окммуникациях с БД. Спасибо, я это более-менее знаю, мой вопрос был не том, как обойти проблему, а как оно работает. Распишу подробнее: 1. Тип в базе простой TIMESTAMP 2. Java код пишет insert c java.sql.Timestamp с определённым временем (несуществующим из-за перехода в DST) 3. На выходе в базе разные значения в зависимости от версии используемого JDBC драйвера Вопрос - как такое могло произойти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2018, 22:49 |
|
||
|
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
|
|||
|---|---|---|---|
|
#18+
IgorMpРаспишу подробнее: 1. Тип в базе простой TIMESTAMP 2. Java код пишет insert c java.sql.Timestamp с определённым временем (несуществующим из-за перехода в DST) 3. На выходе в базе разные значения в зависимости от версии используемого JDBC драйвера Вопрос - как такое могло произойти?несуществующего времени в timestamp без тайм зоны не бывает (кроме 1582). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2018, 22:55 |
|
||
|
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
|
|||
|---|---|---|---|
|
#18+
Бывает даже несуществующее время в DATE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2018, 02:35 |
|
||
|
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
|
|||
|---|---|---|---|
|
#18+
Хотя, вру, это было именно timestamp Код: plsql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2018, 02:48 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39745648&tid=1883058]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 450ms |

| 0 / 0 |
