我有字符串格式的时间戳,即“2015-03-24T07:08:24.000Z”,如何将其转换回时间戳,即2015-03-24T07:08:24.000Z来自ORACLE中的给定字符串?
答案 0 :(得分:1)
据推测,固定的T和Z让你有点困惑,因为它们不是正常的datetime format model元素。但the documentation说:
您可以在日期格式模型中包含这些字符:
- 连字符,斜线,逗号,句号和冒号等标点符号
- 字符文字,用双引号括起来
因此,您可以在格式模型中将T和Z括在双引号中,如"T"
和"Z"
。
如果您没有在时区内进行干扰,可以使用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不会被解释为Zulu / 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;如果你真的在需要转换的值中得到不同的时区,那么你需要提取并应用那些 - 这是可行的,但很难,除非你真的有这种情况,否则不值得进去。