2016-02-13 60 views

回答

0

推測固定的T和Z讓你感到困惑,因爲它們不是正常的元素。但the documentation說:

可以包括日期格式模型中,這些字符:

  • 標點符號,如連字符,斜線,逗號,句號和冒號
  • 字符文字,用雙引號標記

所以你圍住T和的Z雙引號,因爲"T""Z",在你的格式模型中。

如果你沒有在時區interersted你可以使用the to_timestamp() function

to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') 

或者,如果你想有一個與時區,你可以使用the to_timestamp_tz() function,這將默認爲當前會話時區(如您實際上並沒有指定一個位置時,Z不被解釋爲祖魯/ UTC):

to_timestamp_tz('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') 

如果你有一個時區希望,並希望將其指定爲UTC您可以強制與the from_tz() function

from_tz(to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')), 'UTC') 

要看到那些產生差異,指定一個時區的會話作爲演示:

alter session set time_zone = 'America/New_York'; 

select to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') as no_tz, 
    to_timestamp_tz('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') as default_tz, 
    from_tz(to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"'), 'UTC') as utc_tz 
from dual; 

NO_TZ 
-------------------------------------------------- 
DEFAULT_TZ 
-------------------------------------------------- 
UTC_TZ 
-------------------------------------------------- 
24-MAR-15 07.08.24.000000000      
24-MAR-15 07.08.24.000000000 AMERICA/NEW_YORK  
24-MAR-15 07.08.24.000000000 UTC     

我假設在Z是固定的值你因此總代表UTC;如果實際上在需要轉換的值中獲得不同的時區,那麼您需要提取並應用這些值 - 這是可行的,但很難實現,除非您確實存在這種情況,否則不值得進入。

+0

其實「Z」定義「UTC」 - 至少根據ISO -8601 –

+0

@WernfriedDomscheit - 是的,因此第三個選項強制這個,這可能是最正確的。也許我應該更清楚它應該被使用。我沒有涉及到的是將UTC值轉換回OP的(會話或數據庫)時區,如果它將被存儲爲沒有時間戳的時區,我想應該這樣做。 –

相關問題