XSLT将dateTime转换为默认时区

时间:2013-10-17 12:11:48

标签: datetime xslt

我的输入XML 01.08.2013 11:22中有一个日期需要转换为此格式2013-08-01T11:22:00+02:00

我的输入XML:

<?xml version="1.0"?>
<input>01.08.2013 11:22</input>

所需的输出

<?xml version="1.0"?>
<output>2013-08-01T11:22:00+02:00</output>

到目前为止我做了什么:

  1. 01.08.2013 11:22转换为xs:dateTime确定(使用我自己的功能)
  2. 将标准xs:dateTime转换为2013-08-01T11:22:00+02:00这里我失败了,因为我没有定义时区。我需要服务器默认时区(夏天夏令时可能会改变)
  3. 首先,我搜索了一个标准操作,但没有找到任何东西。所以我创建了自己的基于字符串的函数,将输入转换为标准日期,这是有效的。

    但现在我的输出2)无法正常工作,因为我没有时区,我的输出总是2013-8-1T11:22:00没有时区....

    如何将时区添加到日期以便我的输出正确?

    或者一般来说,如何将01.08.2013 11:22转换为2013-08-01T11:22:00+02:00

    <xsl:template name="convertDate">
        <xsl:param name="givenDate"/>
        <!-- a) Convert `01.08.2013 11:22` to a xs:dateTime  -->
        <xsl:variable name="dd" select="substring-before($givenDate, '.')"/>
        <xsl:variable name="mmRest" select="substring-after($givenDate, '.')"/>
        <xsl:variable name="mm" select="substring-before($mmRest, '.')"/>
        <xsl:variable name="yyyyRest" select="substring-after($mmRest, '.')"/>
        <xsl:variable name="yyyy" select="substring-before($yyyyRest, ' ')"/>
        <xsl:variable name="hhRest" select="substring-after($yyyyRest, ' ')"/>
        <xsl:variable name="hh" select="substring-before($hhRest, ':')"/>
        <xsl:variable name="min" select="substring-after($hhRest, ':')"/>
        <xsl:variable name="correctDate" select="xs:dateTime(concat($yyyy,'-',$mm,'-',$dd,'T',$hh,':',$min,':','00'))"/>        
    
        <!-- b) Convert the standard xs:dateTime to `2013-08-01T11:22:00+02:00`  -->
        <xsl:value-of select="format-dateTime($correctDate,'[Y]-[M]-[D]T[H]:[m]:[s][z]')"/>
    </xsl:template>
    

1 个答案:

答案 0 :(得分:0)

如果<xsl:value-of select="current-dateTime()"/>XPATH 2.0 Function并返回时区呢?