使用XSL转换Windows 64位文件时结构格式

时间:2012-10-14 04:25:50

标签: xml xslt xslt-2.0 datetime-format xpath-2.0

遵循这个建议:How to convert ticks into a readable datetime with XSLT?显示如何以人类可读的日期时间格式转换Unix时间戳格式,我想用XSL转换Windows 64-bit filetime structure

<xsl:value-of select="xs:dateTime('1960-01-01T00:00:00Z') + @WDT * xs:dayTimeDuration('PT0.0000001S')"/>

其中@WDT属性表示Windows 64位日期时间编号。

但是我没有得到理想的结果。我得到了日期:“2371-06-30T01:10:04.34375Z”为“129854922043437500”,而我期待:“30.06.2012 03:10:04”
这种方法可能有什么问题?

1 个答案:

答案 0 :(得分:1)

主要问题是你正在使用的初始dtae - 正确的日期是1601年1月1日。

<强>因此

<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:template match="/">
   <xsl:value-of select=
   "xs:dateTime('1601-01-01T00:00:00Z')
     + 129854922043437500 idiv 10000000 *xs:dayTimeDuration('PT1S')"/>
 </xsl:template>
</xsl:stylesheet>

应用于任何XML文档(未使用)时,会产生所需的正确结果:

2012-06-30T01:10:04Z