0

Я пишу процедуру, где я получаю смещение временной зоны от базы данных, и мое требование - манипулировать местным временем с помощью смещения часового пояса, чтобы получить время UTC.Как добавить или вычесть смещение временной зоны в timestamp

Например,

If local time is : 2/3/2013 2:05:53.000000 PM 
timezone offset is : 5:30 
Output should be : 2/3/2013 8:35:53.000000 AM (2/3/2013 2:05:53.000000 PM - 5:30) 

Может кто-нибудь помочь мне с соответствующей функцией для этого.

ответ

2

Вы можете использовать FROM_TZ, чтобы сформировать TIMESTAMP WITH TIME ZONE значение , объединив TIMESTAMP и TIME ZONE. Затем используйте SYS_EXTRACT_UTC , чтобы преобразовать его в UTC Time.

SQL> select from_tz(timestamp'2013-02-03 14:05:53','05:30'), 
      sys_extract_utc(from_tz(timestamp'2013-02-03 14:05:53','05:30')) 
    from dual; 

FROM_TZ(TIMESTAMP'2013-02-0314:05:53','05:30') SYS_EXTRACT_UTC(FROM_TZ(TIMESTAMP'2013-02-0314:05:53','05:30')) 
------------------------------------------------- ----------------------------------------------------------------- 
03-FEB-13 02.05.53.000000000 PM +05:30   03-FEB-13 08.35.53.000000000 AM 
+0

Спасибо за ваш ответ @ съесть персик, но в данном примере это subracting часовой пояс смещение но в запросе он показывает, что он добавляет .. бит путают – Siva

+0

Получил результат. Спасибо за ваш ответ – Siva

+0

+5.30 означает, что время в пять с половиной часов до UTC. Итак, в 02.05 PM в Индии (который имеет +5.30 tz), время в Англии (часовой пояс UTC) будет 8.35 AM – Noel

3

С Datetime Expressions вы можете сделать его еще более универсальным:

SELECT FROM_TZ(TIMESTAMP '2013-02-03 14:05:53', '05:30') AT TIME ZONE 'UTC' 
FROM dual; 

или

SELECT (TIMESTAMP '2013-02-03 14:05:53' AT TIME ZONE '05:30') AT TIME ZONE 'UTC' 
FROM dual;