将动态GMT日期转换为oracle中时区的时间戳

时间:2016-10-07 06:02:05

标签: oracle oracle11g oracle-sqldeveloper timestamp-with-timezone

有一个要求,我的oracle过程是由java api使用REST或SOAP调用调用的。

示例程序

 procedure sample(id in varchar2(30),logged_dt in varchar2(30),name out varchar2(30))
BEGIN
<DATE CONVERSION LOGIC>
END;
/

logged_dt输入在以下任何一种情况下都以GMT日期格式传递,例如

  1. 2016-10-06T06:29:55-04:00
  2. 2016-10-08T14:01:27Z
  3. 我需要处理dateformat到来并转换为所需的oracle UTC时区格式。

    我转换了一个样本案例

    &#39; 2016-10-06T11:31:28.592 + 0000'

    to_timestamp_tz(to_timestamp('2016-10-06T11:31:28.592+0000’,'YYYY-MM-DD"T"HH24:MI:SS.ff3"+0000"') at time zone 'UTC')
    

    如何将INPUT过程中的任何内容动态转换为所需格式并将其转换为时区UTC格式

1 个答案:

答案 0 :(得分:1)

难以处理“输入任何内容”,请查看各种全球日期格式:Date format by countryDate Format

但是,为了处理您提供的输入值,您可以使用如下函数:

FUNCTION String2Timestamp(ts IN VARCHAR2) RETURN TIMESTAMP WITH TIME ZONE DETERMINISTIC IS
BEGIN
    IF REGEXP_LIKE(ts, '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\+|-)\d{2}:\d{2}$') THEN
        RETURN TO_TIMESTAMP_TZ(ts, 'YYYY-MM-DD"T"HH24:MI:SSTZM:TZH') AT TIME ZONE 'UTC';
    ELSIF REGEXP_LIKE(ts, '^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$') THEN
        RETURN TO_TIMESTAMP(ts, 'YYYY-MM-DD"T"HH24:MI:SS"Z"') AT TIME ZONE 'UTC';
    END IF;
END String2Timestamp;