我是一個PL/SQL新手誰需要轉換milleseconds自UNIX時代以來 日期/時間。我可以轉換爲GMT日期/時間,但不知道如何調整時區的 。我很接近但並不完全。甲骨文:時代milleseconds日期/時間與時區包括
我輸入r_msg.OriginationTime,其中有像1382552100277
值這
MpD NUMBER := (1/24/60/60/1000); -- Milleseconds per Day
DFmt24 VARCHAR2(21) := 'MM/DD/YYYY HH24:MI:SS'; -- Date format
TMPorig24 VARCHAR2(20);
. . .
TMPorig24 := TO_CHAR(DATE '1970-01-01' + MpD * r_msg.OriginationTime, DFmt24);
給出類似
10/23/2013 18:15:00
這正是我想要的,除了它是GMT。
這
TimeZoneOffset VARCHAR(7);
. . .
TimeZoneOffset := tz_offset('America/New_York');
給
-04:00
所以我只需要像做
TMPorig24 := TMPorig24 + TimeZoneOffset;
,但我得到
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
我已經嘗試了幾個變化,但沒有任何作品。
任何幫助表示讚賞。
謝謝,但我有兩個解決方案的問題。
無論時區如何,第一個解決方案都可以同時打印。例如,這些打印相同的值。 (CAST(DATE'1970-01-01'+(1/24/60/60/1000)* r_msg.OriginationTime AS TIMESTAMP),'America/New_York'),'America/New_York','''''', MM/DD/YYYY HH24:MI:SS'); (CAST(DATE'1970-01-01'+(1/24/60/60/1000)* r_msg.OriginationTime AS TIMESTAMP),'Pacific/Pago_Pago'),'''''''''''''''''''''''''' MM/DD/YYYY HH24:MI:SS');
第二溶液
TMPorig:= TO_CHAR( DATE '1970-01-01' +(1/24/60/60/1000)* r_msg.OriginationTime + INTERVAL '-04:00' HOUR TO MINUTE,'MM/DD/YYYY HH24:MI:SS');
給
PLS-00166: bad format for date, time, timestamp or interval literal
Moveover,'04:00' 當夏令時結束將是錯誤的。 我需要表達一下EST/EDT和GMT之間的時差。
** * ** * ** *運行完美THANKS * ** * ** * ** * ** * *
TMPorig2:= TO_CHAR((CAST(日期'1970-01-01'+(1/24/60/60/1000)* r_msg.OriginationTime AS TIMESTAMP)'UTC') AT TIME ZONE'America/New_York','MM/DD/YYYY HH24:MI:SS');
好吧,我已經編輯我的答案 - 檢查新的解決方案。 –