如何使用 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"/>