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

Функция

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

Спецификация
 
<​синтаксис​>::=
<​временная_зона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'