如何使用XSLT将ticks转换为可读的日期时间?

MrF*_*Fox 14 xslt datetime xslt-2.0

我有一个带有时间戳的XML,如下所示:

<node stamp="1236888746689" />
Run Code Online (Sandbox Code Playgroud)

我想在结果HTML中将它们显示为日期和时间.有没有办法用XSLT(任何版本)做到这一点?

编辑: 我正在使用XSLT2.0与Saxon9.基准日期是1970-01-01 0:00.

f3l*_*lix 18

您可以获取日期1970-01-01T00:00:00并添加与图章值告诉您的毫秒数:

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns="http://www.w3.org/TR/xhtml1/strict">

    <xsl:template match="node">
        <xsl:value-of
select='xs:dateTime("1970-01-01T00:00:00") + @stamp * xs:dayTimeDuration("PT0.001S")'/>
    </xsl:template>

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)


Ben*_*ank 9

如果您使用的是支持EXSLT日期函数的XSLT 1.0处理器(我刚用PHP中的libxslt对其进行了测试),您可以使用date:add()date:duration():

<xsl:value-of select="date:add('1970-01-01T00:00:00Z', date:duration(@stamp div 1000))"/>
Run Code Online (Sandbox Code Playgroud)

date:duration()函数需要几秒钟(因此您必须将毫秒除以1000)并将其转换为"持续时间"(在本例中为" P14315DT20H12M26.6889998912811S"),然后将其添加到您的纪元的开头(看起来像标准这个邮票的时代,date:add()以获得" 2009-03-12T20:12:26.6889998912811Z" 的印章.然后,您可以使用EXSLT日期函数或仅substring()根据您的需要对其进行格式化.