xslt - 在 xslt 2.0 中使用时区将纪元转换为日期和时间

标签 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') "/>

会将给定的 GMT 日期事件计算为带有公历 (AD) 的印度标准时间 (IST),但它只会打印:

7 July 2013 11:08PM +00:00 (Gregorian)

所以它不会改变时区。 要转换时区,我们必须使用:

adjust-dateTime-to-timezone

但是这个函数只接受以小时/分钟为单位的持续时间,而不是 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>

关于xslt - 在 xslt 2.0 中使用时区将纪元转换为日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19271594/

相关文章:

xml - 对 XML 文件中的元素进行排序

xml - 预期 token 'eof' 找到 '@'

XSLT::结果文档

java - 在java中为xpath仅选择某些tr标签

xslt - 通过 XSLT 根据源 XML 中特定元素的连续出现向 XML 添加属性

xslt - 具有动态匹配的xslt调用模板

xml - XSLT:如何用所有 sibling 的串联替换第一个 sibling ?

xslt - XSL:已死或未死

java - 选择按钮的 XPath?

java - 使用 XPath 从 WSDL XML 中提取对象列表