Окт 282011
 

Временная зона сессии - параметр, влияющий на представление и преобразование данных типов TIMESTAMP WITH TIME ZONE и TIMESTAMP WITH LOCAL TIME ZONE в конкретной сессии. Текущее значение данного параметра можно узнать простым запросом:

SELECT SESSIONTIMEZONE FROM DUAL;

Временная зона сессии задаётся с помощью переменной окружения ORA_SDTZ на клиентской машине либо явно, с помощью конструкции ALTER SESSION SET TIME_ZONE=...
Переменная окружения ORA_SDTZ может принимать следующие типы значений:

  • 'OS_TZ' - локальная (клиентская) таймзона ОС
  • 'DB_TZ' - таймзона базы данных
  • '+04:00' - смещение относительно UTC
  • 'Europe/Moscow' - именованная таймзона

В случае явного задания с помощью ALTER SESSION временная зона может иметь значения:

  • local - локальная (клиентская) таймзона ОС
  • dbtimezone - таймзона базы данных
  • '+04:00' - смещение относительно UTC
  • 'Europe/Moscow' - именованная таймзона

Любопытный факт: нигде не документировано, какое значение будет возвращать sessiontimezone в случае, если переменная ORA_SDTZ не установлена и значение никак не задано явно.
В результате эксперимента удалось выяснить, что в этом случае временная зона сессии будет равняться временной зоне клиентской ОС, приведённой к абсолютному смещению, т.е. если, например, в ОС установлена зона 'Europe/Moscow', то sessiontimezone вернёт '+04:00', а если 'Asia/Vladivostok', то значение будет '+10:00'.
Посвящается «проблеме 2011», вызванной отменой перехода на зимнее время в России.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)