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

Разбирался с проблемой при вставке дат в 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
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
    #39745648
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorMpкак работает JDBC driverВ стандартном java.sql нет таймстапа с таймзоной, мапинг на sql-ный timestamp with time zone не предусмотрен и, соответсвенно, нет проблем с переходом на зимнее/летнее время.
Оракловый oracle.sql.TIMESTAMPTZ поддерживает тайм зону и что в нее запишешь, то и будет передаваться при окммуникациях с БД.
...
Рейтинг: 0 / 0
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
    #39745656
IgorMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-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
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
    #39745659
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorMpРаспишу подробнее:
1. Тип в базе простой TIMESTAMP
2. Java код пишет insert c java.sql.Timestamp с определённым временем (несуществующим из-за перехода в DST)
3. На выходе в базе разные значения в зависимости от версии используемого JDBC драйвера

Вопрос - как такое могло произойти?несуществующего времени в timestamp без тайм зоны не бывает (кроме 1582).
...
Рейтинг: 0 / 0
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
    #39745697
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бывает даже несуществующее время в DATE
...
Рейтинг: 0 / 0
Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
    #39745699
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя, вру, это было именно 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
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как Oracle JDBC driver модифицирует даты в зависимости от Daylight Saving Time?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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