使用xsl将日期格式从dd / mm / yyyy转换为yyyy-mm-dd

时间:2019-05-30 09:55:48

标签: xslt xslt-1.0

我第一次使用XSLT。 我需要将日期从dd / mm / yyyy转换为yyyy-mm-dd。 下面是我的代码。

<xsl:element name="transactionDate">
                                <xsl:value-of select="concat(substring(col26,5,5), '-', substring(col26,3,1), '-', substring(col26,1,1))"/>
            </xsl:element>

在上面的代码中,我能够将日期从dd / mm / yyyy转换为yyyy-mm-dd,但是当日期为两位数时,则无法正常工作。

有人可以建议吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

如果col26包含dd/mm/yyyy格式的日期,则您的表达式应为:

<xsl:value-of select="concat(substring(col26, 7, 4), '-', substring(col26, 4, 2), '-', substring(col26, 1, 2))"/>

不确定“日期何时为两位数”是什么意思。上面假设输入中的天和月分别用零填充到2位数字。否则,格式为 dd/mm/yyyy


已添加:

  

如果日期是2/4/2019,那么(我的代码)可以正常工作

如果日期可以为2/4/2019,则格式为d/m/y,而不是dd/mm/yyyy。要将其转换为yyyy-mm-dd,请尝试:

<transactionDate>
    <xsl:variable name="d" select="substring-before(col26, '/')" />
    <xsl:variable name="m" select="substring-before(substring-after(col26, '/'), '/')" />
    <xsl:variable name="y" select="substring-after(substring-after(col26, '/'), '/')" />

    <xsl:value-of select="format-number($y, '0000')" />
    <xsl:value-of select="format-number($m, '-00')" />
    <xsl:value-of select="format-number($d, '-00')" />
</transactionDate>

添加了#2:

  

很抱歉通知您,日期字段中的值为“ 20/12/2019 9:24:00 AM”,csv中的时间也到了

令人遗憾的是您没有尽快透露此信息。

如果您输入的格式为d/m/y h:mm:ss xm,请使用:

<transactionDate>
    <xsl:variable name="date" select="substring-before(col26, ' ')" />

    <xsl:variable name="d" select="substring-before($date, '/')" />
    <xsl:variable name="m" select="substring-before(substring-after($date, '/'), '/')" />
    <xsl:variable name="y" select="substring-after(substring-after($date, '/'), '/')" />

    <xsl:value-of select="format-number($y, '0000')" />
    <xsl:value-of select="format-number($m, '-00')" />
    <xsl:value-of select="format-number($d, '-00')" />
</transactionDate>

演示https://xsltfiddle.liberty-development.net/pPzifpU