Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time? / 6 сообщений из 6, страница 1 из 1
10.12.2018, 21:58
    #39745639
IgorMp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
Здравствуйте!

Разбирался с проблемой при вставке дат в 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?
...
Рейтинг: 0 / 0
10.12.2018, 22:32
    #39745648
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
IgorMpкак работает JDBC driverВ стандартном java.sql нет таймстапа с таймзоной, мапинг на sql-ный timestamp with time zone не предусмотрен и, соответсвенно, нет проблем с переходом на зимнее/летнее время.
Оракловый oracle.sql.TIMESTAMPTZ поддерживает тайм зону и что в нее запишешь, то и будет передаваться при окммуникациях с БД.
...
Рейтинг: 0 / 0
10.12.2018, 22:49
    #39745656
IgorMp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
-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 драйвера

Вопрос - как такое могло произойти?
...
Рейтинг: 0 / 0
10.12.2018, 22:55
    #39745659
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
IgorMpРаспишу подробнее:
1. Тип в базе простой TIMESTAMP
2. Java код пишет insert c java.sql.Timestamp с определённым временем (несуществующим из-за перехода в DST)
3. На выходе в базе разные значения в зависимости от версии используемого JDBC драйвера

Вопрос - как такое могло произойти?несуществующего времени в timestamp без тайм зоны не бывает (кроме 1582).
...
Рейтинг: 0 / 0
11.12.2018, 02:35
    #39745697
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
Бывает даже несуществующее время в DATE
...
Рейтинг: 0 / 0
11.12.2018, 02:48
    #39745699
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
Хотя, вру, это было именно timestamp
Код: plsql
1.
2.
3.
4.
5.
tst> select timestamp '1998-03-29 02:11:12 Asia/Vladivostok' from dual;
select timestamp '1998-03-29 02:11:12 Asia/Vladivostok' from dual
                 *
ERROR at line 1:
ORA-01878: specified field not found in datetime or interval
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]