【问题标题】:XSLT DateTime format conversion to YYYY-DD-MMTHH:MI:SSXSLT DateTime 格式转换为 YYYY-DD-MMTHH:MI:SS
【发布时间】:2015-05-25 13:48:33
【问题描述】:

我要转换这个

5/21/15 13:47YYYY-DD-MMTHH:MI:SS

源格式为d(or)dd/m(or)mm/yy hh:mm

我该怎么做?

【问题讨论】:

  • 请选择 XSLT 1.0 或 2.0,不要同时选择两者。
  • 嗨,迈克尔。编辑问题以仅添加 xslt 2.0
  • 您可以例如使用xsl:analyze-string 来提取组件,然后您可以构造一个xs:dateTime 值。但是,您首先需要决定如何将两位数年份值转换为四位数年份值。
  • 编辑并使用了代码格式而不是粗体。删除了绒毛句子。

标签: xslt xslt-2.0 formatdatetime


【解决方案1】:

给定一个示例输入:

XML

<given-date>5/21/15 13:47</given-date>

你可以使用:

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="given-date">
    <result>
            <xsl:variable name="dte" select="tokenize(.,'/|\s')" />
            <xsl:value-of select="concat('20', $dte[3], format-number(number($dte[1]), '-00'), format-number(number($dte[2]), '-00'), 'T', $dte[4], ':00')" />
    </result>
</xsl:template>

</xsl:stylesheet>

返回:

<?xml version="1.0" encoding="UTF-8"?>
<result>2015-05-21T13:47:00</result>

请注意,这假设您的所有日期都在 2000 年到 2099 年之间。

【讨论】:

    【解决方案2】:

    类似这样的:

    <xsl:analyze-string select="$in" 
                        regex="(\d+)/(\d+)/(\d+) (\d+):(\d+)">
      <xsl:matching-substring>
      <xsl:value-of select="'20',
        format-number(number(regex-group(3)), '00'),
        '-',
        format-number(number(regex-group(1)), '00'),
        '-',
        format-number(number(regex-group(2)), '00'),
        'T',
        format-number(number(regex-group(4)), '00'),
        ':',
        format-number(number(regex-group(5)), '00'),
        ':00'"
      separator=""/>
      </xsl:matching-substring>
    </xsl:analyze-string>
    

    【讨论】:

    • 我确实说过“类似”...我已经删除了一些更明显的错误(但仍未经过测试)。
    猜你喜欢
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多