我的输入 XML01.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>
到目前为止我做了什么:
- 转换
01.08.2013 11:22
为 xs:dateTime OK(使用我自己的函数) - 将标准 xs:dateTime 转换为
2013-08-01T11:22:00+02:00
Here 我失败了,因为我没有定义时区。我需要采用服务器默认时区(夏季夏令时可能会更改)
首先,我搜索了一个标准操作,但没有找到任何东西。所以我创建了自己的基于字符串的函数,将输入转换为标准日期,这是有效的。
但是现在我的输出 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>