如何在xslt 2.0中根据时区将纪元时间转换为日期和时间?
例如,纪元时间1212497304转换为
GMT: 星期二, 03 六月 2008 12:48:24 GMT时区: Martes, 03 de Junio de 2008 14:48:24 GMT+2
这是因为夏令时 (DST(:在许多国家/地区,夏季多一小时,在某些日期每年都会有所不同。
例如,假设此指令:
<xsl:value-of select=" format-dateTime(xs:dateTime('2013-07-07T23:08:00+00:00'), '[D] [MNn] [Y] [h]:[m01][PN,*-2] [Z] ([C])', 'en', 'AD', 'IST') "/>
将使用公历 (AD( 将给定的 GMT 日期事件计算为印度标准时间 (IST(,但它只是打印:
7 July 2013 11:08PM +00:00 (Gregorian)
因此,它不会改变时区。要改变时区,我们必须使用:
adjust-dateTime-to-timezone
但此函数仅接受以小时/分钟数为单位的持续时间,而不接受时区,以便处理器确定是否存在 DST。
任何建议,请
编辑:这不是实际问题的答案,即如何获得正确的本地时间,尊重其时区,但我仍然会把它留在这里,因为它可能对某人有用。
因为纪元距离 unix 时间刚刚过去了几秒钟,所以您可以像这样将其添加到 unix 时间中:
Unix 时间是自午夜 1970-01-01 纪元以来经过的秒数,您可以执行以下操作:
<xsl:value-of select="xs:dateTime('1970-01-01T00:00:00') + xs:dayTimeDuration('PT1212497304S')"
/>
这将为您提供正确的 xs:dateTime 的 2008-06-03T12:48:24
放入函数:
<xsl:function name="fn:epochToDate">
<xsl:param name="epoch"/>
<xsl:variable name="dayTimeDuration" select="concat('PT',$epoch,'S')"/>
<xsl:value-of select="xs:dateTime('1970-01-01T00:00:00') + xs:dayTimeDuration($dayTimeDuration)"/>
</xsl:function>