将纪元转换为日期& xslt 2.0中的时区时间

时间:2013-10-09 12:09:01

标签: xslt xpath xslt-1.0 xslt-2.0

如何将纪元时间转换为日期&时间基于xslt 2.0中的时区?

例如,纪元时间1212497304转换为

<格林威治标准时间:2008年6月3日星期二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

但是此函数仅接受小时/分钟的持续时间,而不是TimeZone,以便处理器确定是否存在DST。

有任何建议,请

1 个答案:

答案 0 :(得分:1)

编辑:这不是真正的问题的答案,这是如何获得正确的当地时间,尊重其时区,但我仍然会留在这里,因为它可能是对某人有用。

因为epoch距离unix时间只有几秒钟,所以你可以将它添加到unix时间,如下所示:

Unix时间是自1970-01-01午夜以来经过的秒数,您可以这样做:

<xsl:value-of select="xs:dateTime('1970-01-01T00:00:00') + xs:dayTimeDuration('PT1212497304S')"
    />

这将为您提供正确的xs:dateTime of 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>