我将一些时间戳保存在我的XML结果中,以标准的UTC格式。
我想做的是将其重新转换为人类可读的时间。没有时区附录。到目前为止,我所能得到的是:
format-dateTime(
xs:dateTime(
adjust-dateTime-to-timezone(
xs:dateTime(@thevalue),xs:dayTimeDuration('P0DT4H')
)
),'[M01]/[D01]/[Y0001] [H01]:[m01]:[s01]'
)
其中@thevalue类似于:2006-02-15T17:00:00
这让我很头疼,因为格式化程序返回的时间是17:00。如果我剥离format-dateTime的一层来查看adjust-dateTime函数返回的内容,它会给出
2006-02-15T17:00:00+04:00
…而我真正想看到的是21点……非常沮丧。有人以前处理过这个问题吗?
这是一个您想要的转换:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vDateTime" as="xs:dateTime"
select="xs:dateTime('2006-02-15T17:00:00+00:00')"/>
<xsl:template match="/">
<xsl:sequence select=
"adjust-dateTime-to-timezone($vDateTime,
xs:dayTimeDuration('P0DT4H')
)"/>
</xsl:template>
</xsl:stylesheet>
当应用于任何XML文档(未使用)时,结果是:
2006-02-15T21:00:00+04:00
完整的解为:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vDateTime" as="xs:dateTime"
select="xs:dateTime('2006-02-15T17:00:00+00:00')"/>
<xsl:template match="/">
<xsl:variable name="vadjustedDateTime" select=
"adjust-dateTime-to-timezone($vDateTime,
xs:dayTimeDuration('P0DT4H')
)"/>
<xsl:sequence select=
"format-dateTime($vadjustedDateTime,
'[M01]/[D01]/[Y0001] [H01]:[m01]:[s01]'
)
"/>
</xsl:template>
</xsl:stylesheet>
产生这个结果:
02/15/2006 21:00:00