0

我正在寫一個過程,其中我從數據庫中獲得時區偏移量,我的要求是使用時區偏移量操縱本地時間以獲取UTC時間。如何添加或減去時間戳的時區偏移

例如,

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

通過組合TIMESTAMP和TIME ZONE,可以使用FROM_TZ形成TIMESTAMP WITH TIME ZONE值 。接下來,使用SYS_EXTRACT_UTC 將其轉換爲UTC時間。

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分(里程爲+5.30 tz),英格蘭時間(UTC時區)將是上午8點35分 – 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;