将TZ字符串格式的TimeStamp转换为Oracle中的TimeStamp

时间:2016-02-13 12:33:49

标签: oracle timestamp type-conversion

我有字符串格式的时间戳,即“2015-03-24T07:08:24.000Z”,如何将其转换回时间戳,即2015-03-24T07:08:24.000Z来自ORACLE中的给定字符串?

1 个答案:

答案 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;如果你真的在需要转换的值中得到不同的时区,那么你需要提取并应用那些 - 这是可行的,但很难,除非你真的有这种情况,否则不值得进去。