Доступные версии документации

Преобразование локального времени ко времени заданного часового пояса

Функция

Преобразование локального времени ко времени заданного часового пояса.

Спецификация
 
<временная_зона1>::=
<временная_зона2>::=
<смещение>::=
'[+|-]hh[:mm[:ss]]'
<время>::=
'[+|-]hh[:mm[:ss]]'
<дата_перехода_на_летнее время>::=
<дата_перехода_на_зимнее время>::=
<месяц>::=
1-12
<неделя>::=
1-5
<день_недели>::=
0-6
Синтаксические правила
  1. <Дата-время выражение> – значение, воспринимаемое как дата (время) локального часового пояса.

  2. Если аргумент <часовой пояс> равен NULL или не задан, то по умолчанию преобразование выполняется к нулевому часовому поясу (по Гринвичу).

    select sysdate,  to_gmtime(sysdate, null);
    |16.08.2010:11:05:20.81|16.08.2010:07:05:20.81|

    Примечание

    В данном случае результат может оказаться неверным, т.к. для формирования времени функция использует текущее значение флага летнего времени в ОС, а не то, которое должно соответствовать дате, указанной в качестве аргумента <дата-время выражение>.

  3. Параметр <временная_зона1> задает номер часового пояса для зимнего времени.

    Получить чему соответствует данное локальное время в 3 часовой зоне (Москва):
    select to_GMTIME(to_date('12.45.00', 'hh.mi.ss'), 'gmt+3');
    |00.00.0000:09:45:00.00|
  4. Параметр <временная_зона2> задает номер часового пояса для летнего времени.

    Обычно отличается от <временной_зоны1> на 1 час, т.е. <временная_зона2>=<временная_зона1>+1.

  5. Для получения летнего времени необходимо указать дату и при необходимости время перехода на летнее и на зимнее время в этом часовом поясе.

    Например, узнать, чему соответствует данное локальное время в 3 часовом поясе
     (дата перехода на летнее время 30 марта в 02.00 часа ночи, на зимнее время – 30 октября в 02.00 часа ночи).
    select to_gmtime(to_date('14.30.00','hh.mi.ss'),' GMT+3:00:00  GMT+04:00:00,
     M3.5.0/2:00:00, M10.5.0/02:00:00 ');
    |00.00.0000:11:30:00.00|
    
  6. Конструкция DST[<смещение>] задает смещение относительно <временной_зоны1>.

    select to_gmtime(to_date('14.30.00','hh.mi.ss'),'GMT+3DST+1,M3.5.0/2,M10.5.0/2');
    эквивалентно
    select to_gmcaltime(to_date('14.30.00','hh.mi.ss'),' GMT+3:00:00  GMT+04:00:00,
     M3.5.0/2:00:00, M10.5.0/02:00:00 ');
    |00.00.0000:17:30:00.00|
  7. Если задана только <временная_зона1>, а <временная_зона2> не задана, то подразумевается, что переход на летнее/зимнее время отсутствует.

  8. <Смещение> задает нужную часовую зону в прямом или обратном (в зависимости от знака) направлении от локального часового пояса. Допустимое значение в интервале от '-14:00:00' до '+14:00:00'.

    select to_char(sysdate,'hh:mm:ss'),  to_char(to_gmtime(sysdate, 'gmt+10'),'hh:mm:ss');
    |11:08:34|01:08:34|
  9. Синтаксис аргумента <часовой пояс> аналогичен этому же аргументу в функции TO_LOCALTIME.

  10. Если задана только <временная_зона1>, а <временная_зона2> не задана, то подразумевается, что переход на летнее/зимнее время отсутствует.

  11. В случае если задана <временная_зона2>, но не задано <смещение> для 'GMT' или <смещение> для 'DST', подразумевается, что оба эти смещения отличаются от <смещения> из <временной_зоны1>на 1 час.

    select to_char(sysdate,'hh:mm:ss'),
    to_char(to_gmtime(sysdate, 'GMT+3'),'hh:mm:ss'),
    to_char(to_gmtime(sysdate, 'GMT+3 GMT,M3.5.0,M10.5.0'),'hh:mm:ss');
    |11:08:44|08:08:44|07:08:44|
  12. <Дата_перехода_на_летнее время>, <дата_перехода_на_зимнее время> – даты перехода на летнее и на зимнее время соответственно.

  13. <Время> – время перехода на летнее или на зимнее время. Если оно не задано, по умолчанию используется значение '02:00:00'.

  14. Знак '+' у <смещения> означает, что часовой пояс лежит к востоку от Гринвича, '-' – к западу от Гринвича.

    Примечание

    Часовой пояс Москвы '+3'/'+4' для зимнего/летнего времени соответственно.

  15. В параметре <неделя> число 5 означает последний день недели в месяце, даже если в месяце всего 4 таких дня недели.

  16. В параметре <день> отсчет дней начинается с воскресенья, т.е. 0 – воскресенье.

  17. Сумма смещений из <временной_зоны1> и конструкции DST <смещение> должна находиться в интервале от '-14:00:00' до '+14:00:00'.

  18. Аргументы могут быть заданы <SQL-параметром>, который должен содержать спецификацию типа данных параметра.

    select to_gmtime(? (date),? (char(30)));
    30.12.2015:23:00:00
    GMT+3DST+1,M3.5.0/2,M10.5.0/2
    |30.12.2015:20:00:00.00|
  19. Поддерживаются условные наименования временных зон (см. таблицу 6).

Общие правила
  1. Интервал времени между GMT и локальным временем вычисляется заново через каждые 30 секунд.

Возвращаемое значение

Значение типа DATE, преобразованное из локальной даты в дату (время) заданного часового пояса в летний или зимний период времени.

Примеры
  1. Самолет вылетел из Иркутска 28.12.2007 в 15.45.00 по местному времени (8 часовой пояс) в Воронеж (3 часовой пояс).
    Длительность полета 3 час 47 мин.
    Узнать местное время прибытия самолета.
    select
    'Время отправления: '+
    to_char(to_localtime(to_date('28.12.2007.15.45', 'dd.mm.yyyy.hh.mi'), 'gmt+0'), 'dd.mm.yyyy.hh.mi')
    union
    select  'Время прибытия:    '+
    to_char(to_gmtime(to_localtime(to_date('28.12.2007.15.45', 'dd.mm.yyyy.hh.mi'), 'gmt+0')
    +to_date('03','hh')
    + to_date('47','mi'),'gmt+5'),'dd.mm.yyyy.hh.mi');
    |Время отправления: 28.12.2007.15.45|
    |Время прибытия:    28.12.2007.14.32|
  2. Варианты задания часового пояса Москвы:
    'GMT+03:00:00GMT+04:00:00,M3.5.0/02:00:00,M10.5.0/02:00:00'
    'GMT+3DST+1,M3.5.0/2,M10.5.0/2'
    'GMT+3DST,M3.5.0,M10.5.0'
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter