使用 toChar 以 W3C XML Schema xs:dateTime 类型格式输出日期

Posted

技术标签:

【中文标题】使用 toChar 以 W3C XML Schema xs:dateTime 类型格式输出日期【英文标题】:Using toChar to output a date in W3C XML Schema xs:dateTime type format 【发布时间】:2013-08-16 12:47:03 【问题描述】:

我正在尝试使用toCharsysdate 转换为以下格式: 2006-11-20T17:10:02+01:00

从这种格式: 16/08/2012 13:40:59

有这样做的标准方法吗?

我尝试使用toCharT 部分指定为字符串,但它似乎不起作用。

提前致谢

Jezzipin

编辑:

我已经尝试过 Nicholas 的解决方案,但是正如我上面提到的,我需要使用 sysdate。我使用了以下选择查询:

    select to_char(to_timestamp_tz(sysdate-365, 'dd/mm/yyyy hh24:mi:ss'),'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM') from dual;

但是,这会返回:

     0012-08-16T00:00:00 +01:00

这是不正确的,因为它应该是 2012-08-16T00:00:00 +01:00

【问题讨论】:

为什么需要使用sysdate?为什么systimestamp 不能用于您需要时区信息? 【参考方案1】:

试试:

 select to_char(sysdate, 'yyyy-mm-dd') || 'T' || to_char(sysdate,'hh24:mi:ss') || sessiontimezone
from dual;

返回: 2013-08-16T13:00:51+00:00

【讨论】:

【参考方案2】:

要以包含时区信息的格式显示sysdate,您需要进行一系列转换:

    使用to_char() 函数将sysdate 转换为字符串字面量。 使用to_timestamp_tz() 函数将字符串文字转换为带有tome zone 的时间戳。 最后,使用to_char() 将最终结果转换回字符串字面量。

如下:

 select to_char(
                to_timestamp_tz(
                                 to_char(sysdate - 365, 'dd/mm/yyyy hh24:mi:ss')
                                , 'dd/mm/yyyy hh24:mi:ss')
                , 'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM'
               ) as res
  from dual

结果:

RES
--------------------------
2012-08-16T17:29:28 +04:00

您可以在格式掩码中包含字符串文字,并用双引号将其括起来。

【讨论】:

我需要将它与上面提到的 sysdate 结合使用。因此,我做了以下事情: select to_char(to_timestamp_tz(sysdate-365, 'dd/mm/yyyy hh24:mi:ss'),'yyyy-mm-dd"T"hh24:mi:ss TZH:TZM')从双;但是这会返回 0012-08-16T00:00:00 +01:00 这是不正确的。【参考方案3】:

带有“T”的值称为ISO 8601,也称为“XS:DateTime”或“XSD:DateTime”或“XML Schema DateTime”。 请注意,Oracle 的 sessiontimezone 命令不仅可以返回“-04:00”,还可以返回类似“America/Los_Angeles”的值(取决于数据库设置),这可能不是您想要的。 由于 TZ_OFFSET 返回 \0 - 终止字符串,因此还需要替换。所以这应该有效:

create or replace function to_iso8601 (datetime_in in date) return varchar is 
begin
    return to_char(datetime_in, 'yyyy-mm-dd') || 'T' || to_char(datetime_in,'hh24:mi:ss') || replace(TZ_OFFSET(DBTIMEZONE),chr(0));
end;
/
select to_iso8601(sysdate) from dual;

结果:

2014-11-03T16:53:45-04:00

【讨论】:

以上是关于使用 toChar 以 W3C XML Schema xs:dateTime 类型格式输出日期的主要内容,如果未能解决你的问题,请参考以下文章

Oracle日期格式转换,tochar(),todate()

如何在 JOOQ 中使用 toChar 函数?

字符转换与 Convert.ToChar()

Java XML

在 Android 上解析 XML (org.w3c.Document) 的方法

它是啥样的 SQL? TODATE()、TOCHAR()、isdate 格式()