Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用XSLT将时间戳转换为UTC时区_Xslt - Fatal编程技术网

使用XSLT将时间戳转换为UTC时区

使用XSLT将时间戳转换为UTC时区,xslt,Xslt,我有一个XML,它的时间戳格式为2016-06-07T07:46:04 我想使用xslt将时间戳转换为UTC格式,如1465278364 怎样才能做到呢 提前感谢。不久前,我专门为此编写了一个命名模板。这是: <xsl:template name="converttime"> <xsl:param name="date" select="."/> <xsl:choose> <xsl:when test="translate($date,'

我有一个XML,它的时间戳格式为2016-06-07T07:46:04

我想使用xslt将时间戳转换为UTC格式,如1465278364

怎样才能做到呢


提前感谢。

不久前,我专门为此编写了一个命名模板。这是:

<xsl:template name="converttime">
  <xsl:param name="date" select="."/>
  <xsl:choose>
    <xsl:when test="translate($date,'123456789','000000000') = '0000-00-00T00:00:00'">
      <xsl:value-of select="
        (
          ((substring($date,1,4) - 1970) * 365) + 
          floor((substring($date,1,4) - 1970) div 4) +
          substring(
           '000,031,059,090,120,151,181,212,243,273,304,334,365',
           substring($date,6,2)*4-3, 3
          ) +
          (substring($date,9,2)-1) +
          (1-floor(((substring($date,1,4) mod 4) + 2) div 3))*floor((substring($date,6,2)+17) div 20)
        ) * 86400 +
        (substring($date,12,2)*3600) +
        (substring($date,15,2)*60) +
        substring($date,18,2)
      "/>
    </xsl:when>

    <!-- Unknown format -->
    <xsl:otherwise>-1</xsl:otherwise>
  </xsl:choose>
</xsl:template>

-1
这意味着:

  • 1970年以来的年数乘以365
  • 自1970年以来的闰年数(即闰日数)
  • 给定月份自年初以来的天数(尚未考虑闰年)
  • 自月初以来的天数
  • 如果是闰年,月份是3月或更晚,则为1,否则为0(这个公式相当可怕,如果你真的想要解释,请在评论中告诉我,我会将其分解)
然后将上述所有数据乘以一天中的秒数 然后,只需将小时*(一小时内的秒数)、分钟*(一分钟内的秒数)和秒数相加即可

您可以通过使用不同的日期模式放置不同的
元素来支持不同的日期格式,并且明显地调整子字符串调用以匹配


不过,老实说,只有在不能使用XSLT2.0(或更高版本)或扩展函数时才可以使用它。另外,我注意到您给出的数字与生成的时间相差7200秒,但如果您所在的时区与UTC时间相差2小时,这可能就是原因。

这可能是一个“unix时间戳”,即自协调世界时(UTC)周四00:00:00以来经过的秒数,1970年1月1日-找出公式并实现它怎么样?您能使用XSLT2.0吗?如果可用,可以使用。有趣的。翻译错误($date,'123456789','000000000)缺少引号。您是否考虑过所有闰年算法?如果(年份不能被4整除)那么(这是一个普通年份)如果(年份不能被100整除)那么(这是一个闰年)如果(年份不能被400整除)那么(这是一个普通年份)其他(这是一个闰年)我做了,但自1970年以来的秒数在2038年达到了最大可能值,因为它通常是一个32位数字,因此,以这种方式存储的日期永远不会受到影响。啊,是的,很遗憾,libxml仍然只支持1.0版本。如果有人能提供反向模板-到目前为止的时间戳-那也太好了。我在某个地方有这个模板-如果我能找到它,我会在这里编辑它。