使用XSLT将时间戳转换为UTC时区
我有一个XML,它的时间戳格式为2016-06-07T07:46:04 我想使用xslt将时间戳转换为UTC格式,如1465278364 怎样才能做到呢使用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,'
提前感谢。不久前,我专门为此编写了一个命名模板。这是:
<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版本。如果有人能提供反向模板-到目前为止的时间戳-那也太好了。我在某个地方有这个模板-如果我能找到它,我会在这里编辑它。