Вероятно фиксираните T и Z малко ви объркват, тъй като не са нормални модел на формат за дата и час елементи. Но документацията казва:
Така че ограждате T и Z в двойни кавички, като "T"
и "Z"
, във вашия модел на формат.
Ако не се интересувате от часовата зона, можете да използвате to_timestamp()
функция
:
to_timestamp('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
Или ако искате да имате с часовата зона, можете да използвате to_timestamp_tz()
функция
, който по подразбиране ще бъде часовата зона на текущата ви сесия (тъй като всъщност не посочвате такава тук, Z не се интерпретира като зулу/UTC):
to_timestamp_tz('2015-03-24T07:08:24.000Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
Ако го искате с часова зона и искате да посочите, че е UTC, можете да го принудите с from_tz()
функция
:
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; ако действително получите различни часови зони в стойностите, които трябва да преобразувате, тогава ще трябва да извлечете и приложите тези - което е изпълнимо, но трудно и не си струва да навлизате в него, освен ако наистина не сте в тази ситуация.