XSL datetime,删除时区并将其压缩为时间
我正在以标准UTC格式在XML结果中保存一些时间戳 我想能够做的是将其重新转换为人类可读的时间。没有时区补遗。到目前为止,我所能做到的是:XSL datetime,删除时区并将其压缩为时间,datetime,xslt,timezone,xslt-2.0,Datetime,Xslt,Timezone,Xslt 2.0,我正在以标准UTC格式在XML结果中保存一些时间戳 我想能够做的是将其重新转换为人类可读的时间。没有时区补遗。到目前为止,我所能做到的是: format-dateTime( xs:dateTime( adjust-dateTime-to-timezone( xs:dateTime(@thevalue),xs:dayTimeDuration('P0DT4H') ) ),'[M01]/[D01]/[Y0001] [H01]:[m01]:[s01]' ) 其中@th
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。如果我剥开dateTime格式的一层以查看adjust dateTime函数返回的内容,它会给出
2006-02-15T17:00:00+04:00
。。。我真正想看到的是21: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:sequence select=
"adjust-dateTime-to-timezone($vDateTime,
xs:dayTimeDuration('P0DT4H')
)"/>
</xsl:template>
</xsl:stylesheet>
2006-02-15T21:00:00+04:00
02/15/2006 21:00: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>
你的评论帮助我很好地理解了我的问题。我无法修改保存日期的格式(UTC,但没有+HHMM符号),但我可以通过将其转换为+00:00,然后应用+04:00,然后将dateTime调整为时区,然后设置格式,将其组合在一起。谢谢