如何使用 xslt 2.0 将 2002-05-30T09:30:10-06:00 转换为 Unix 时间戳
How to convert 2002-05-30T09:30:10-06:00 to Unix time stamp using xslt 2.0
这是我正在尝试使用的逻辑。我应该子字符串 2002-05-30T09:30:10-06:00 并得到 2002-05-30T09:30:10 和 06:00 分开和减去并在下面使用它 logic.If 有任何更简单的方法请告诉我。
{代码}
<tns:timestamp>
<xsl:variable name="date" select="/Order/@OrderDate"/>
<xsl:value-of select='xs:dateTime("1970-01-01T00:00:00") + @date *xs:dayTimeDuration("PT0.001S")'/>
</tns:timestamp>
我认为您不应该在计算中减去偏移量。如果你这样做:
(xs:dateTime(@OrderDate) - xs:dateTime('1970-01-01T00:00:00Z')) div xs:dayTimeDuration('PT1S')
结果将是:
1022772610
如果您 convert that unix time into human readable time 得到正确的格林威治标准时间和当地时间:
这是一个例子 (see it working here)...
XML 输入
<Order OrderDate="2002-05-30T09:30:10-06:00"/>
XSLT 2.0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output indent="yes"/>
<xsl:template match="/Order">
<Order unix-time="{(xs:dateTime(@OrderDate) - xs:dateTime('1970-01-01T00:00:00Z'))
div xs:dayTimeDuration('PT1S')}">
<xsl:copy-of select="@*|node()"/>
</Order>
</xsl:template>
</xsl:stylesheet>
XML输出
<Order unix-time="1022772610" OrderDate="2002-05-30T09:30:10-06:00"/>
这是我正在尝试使用的逻辑。我应该子字符串 2002-05-30T09:30:10-06:00 并得到 2002-05-30T09:30:10 和 06:00 分开和减去并在下面使用它 logic.If 有任何更简单的方法请告诉我。 {代码}
<tns:timestamp>
<xsl:variable name="date" select="/Order/@OrderDate"/>
<xsl:value-of select='xs:dateTime("1970-01-01T00:00:00") + @date *xs:dayTimeDuration("PT0.001S")'/>
</tns:timestamp>
我认为您不应该在计算中减去偏移量。如果你这样做:
(xs:dateTime(@OrderDate) - xs:dateTime('1970-01-01T00:00:00Z')) div xs:dayTimeDuration('PT1S')
结果将是:
1022772610
如果您 convert that unix time into human readable time 得到正确的格林威治标准时间和当地时间:
这是一个例子 (see it working here)...
XML 输入
<Order OrderDate="2002-05-30T09:30:10-06:00"/>
XSLT 2.0
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output indent="yes"/>
<xsl:template match="/Order">
<Order unix-time="{(xs:dateTime(@OrderDate) - xs:dateTime('1970-01-01T00:00:00Z'))
div xs:dayTimeDuration('PT1S')}">
<xsl:copy-of select="@*|node()"/>
</Order>
</xsl:template>
</xsl:stylesheet>
XML输出
<Order unix-time="1022772610" OrderDate="2002-05-30T09:30:10-06:00"/>