我有日期(01-oct-2014),時間(00:37:31),格林尼治標準時差(-360) 我想獲得召集到CST的時間。解決方案可以在javascript 或oracle數據庫中。時區轉換爲CST格林尼治標準時間偏移
我已看過一些文章,但could'nt得到任何where..can有人幫我這個...
我有日期(01-oct-2014),時間(00:37:31),格林尼治標準時差(-360) 我想獲得召集到CST的時間。解決方案可以在javascript 或oracle數據庫中。時區轉換爲CST格林尼治標準時間偏移
我已看過一些文章,但could'nt得到任何where..can有人幫我這個...
在Oracle中,你的本地時間轉換到另一個時區的時間,你需要CAST TIMESTAMP WITH TIMEZONE
。
例如,我想轉換「IST」印度標準時間,也就是我的本地時區爲「CST」,即中央:
SQL> WITH T AS
2 (SELECT to_timestamp('10/01/2014 11','mm/dd/yyyy hh24') ist FROM dual
3 )
4 SELECT ist,
5 CAST(CAST(ist AS TIMESTAMP WITH TIME ZONE) at TIME zone 'CST' AS TIMESTAMP) cst
6 FROM t
7/
IST CST
----------------------------------- ------------------------------
01-OCT-14 11.00.00.000000000 AM 01-OCT-14 12.30.00.000000 AM
取Daylight saving
照顧。您可能必須小心瞭解CST
和CDT
。
如果您使用像'US/Central'這樣的命名時區,它會自動從CST切換到CDT,並在春季和秋季恢復正確的日期。 – 2014-10-01 13:13:32
我說要照顧**瞭解**的差異;-) – 2014-10-01 13:27:45
當然是的;-)我只是想確定OP沒有誤解他認爲他需要寫'CASE當IsSummerTime(THE_DATE)THEN' CDT'ELSE'CST'END'(假設他有一個IsSummerTime()函數,這將很難編寫;-) – 2014-10-01 13:35:55
有幾種方法可以做到這一點:
SELECT
(TIMESTAMP '2014-10-01 00:37:31') AT TIME ZONE 'CST',
FROM_TZ((TIMESTAMP '2014-10-01 00:37:31'), 'CST'),
CAST((TIMESTAMP '2014-10-01 00:37:31') AT TIME ZONE 'CST' AS TIMESTAMP)
FROM DUAL;
這取決於如果結果應包括新的時區或沒有。
那麼Java與它有什麼關係呢?那是當地時間還是UTC?我懷疑你實際上不希望CST,但中央時間 - 目前是CDT。 – 2014-10-01 05:58:18
那麼你有在數據庫中的日期列包含日期和時間?或者你是否有TIMESTAMP帶或不帶時區?如果您有DATE列(沒有時區信息),並且您知道「來自」時區,請查看我的博客帖子:http://dspsd.blogspot.dk/2012/02/date-and-dst .html - 有一個函數date_tz_convert()可以轉換爲例如'US/Central'(這可能比CST或CDT更好,因爲它是夏時制的意識:-) – 2014-10-01 13:12:10
@Kim - 是的,但最好使用' 「美國/芝加哥」,而不是「美國/中環」 - 這是一個向後兼容的鏈接。 – 2014-10-01 15:58:27