Pravděpodobně vás pevné T a Z trochu mate, protože nejsou normální model formátu datum a čas Prvky. Ale dokumentace říká:
T a Z tedy uzavřete do dvojitých uvozovek jako "T"
a "Z"
, ve vašem modelu formátu.
Pokud vás časové pásmo nezajímá, můžete použít to_timestamp()
funkce
:
to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
Nebo pokud chcete mít časové pásmo, můžete použít to_timestamp_tz()
funkce
, které bude mít výchozí časové pásmo aktuální relace (protože zde ve skutečnosti žádné nezadáváte, Z není interpretováno jako Zulu/UTC):
to_timestamp_tz('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
Pokud to chcete s časovým pásmem a chcete zadat, že je to UTC, můžete to vynutit pomocí from_tz()
funkce
:
from_tz(to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')), 'UTC')
Chcete-li vidět rozdíl, který produkují, zadejte časové pásmo pro relaci jako ukázku:
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
Předpokládám, že Z je pevné a hodnoty, které získáte, proto vždy představují UTC; pokud skutečně získáte různá časová pásma v hodnotách, které potřebujete převést, budete je muset extrahovat a použít – což je proveditelné, ale obtížné a nestojí za to se do toho pouštět, pokud takovou situaci skutečně nemáte.