首页 > 解决方案 > XSLT 将 UTC 转换为 tz 时区

问题描述

我有以下变量:

<xsl:variable name="time">
 <xsl:value-of select="'2020-12-26T17:33:11Z'"/>
</xsl:variable>


  <xsl:variable name="timeZone">
        <xsl:value-of select="'America/Los_Angeles'" />
    </xsl:variable>

可变时间采用 UTC 格式,我想将其转换为本地时区。我正在使用以下内容,但这不起作用:

<xsl:value-of select="adjust-dateTime-to-timezone($time), xs:dayTimeDuration($timeZone))"/>

我的预期输出是:2020-12-26T09:33:11Z

标签: xslt

解决方案


XSLT/XPath 中几乎所有的日期/时间/时区功能都基于绝对数字时区偏移量,例如 -05:00,而不是基于 CET 或 America/Los_Angeles 等民用时区。一个例外是 format-dateTime(),它旨在格式化数据以供人类消费。format-dateTime() 的第五个参数是“place”:XPath 3.1 说:

如果 $place 参数以实现识别的 IANA 时区名称的形式提供,则格式化的日期或时间将调整为适用于该时区的时区偏移量。例如,如果 xs:dateTime 值 2010-02-15T12:00:00Z 的格式设置为 $place 参数设置为 America/New_York,则输出将与值 2010-02-15T07:00:00- 一样05:00 已提供。这种调整尽可能将夏令时考虑在内;如果所讨论的日期在纽约的夏令时期间,则将其调整为时区偏移量 -PT4H 而不是 -PT5H。仅当值包含日期且日期在时区数据库涵盖的范围内时,才可以使用夏令时进行调整。

请注意,这是 XPath 3.x 中的新功能;2.0 规范只允许使用国家/地区代码,并且对其含义模糊得多。


推荐阅读