我有以下变量:
<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
答案 0 :(得分:1)
XSLT/XPath 中几乎所有的日期/时间/时区功能都基于绝对数字时区偏移,例如 -05:00,而不是基于民用时区,例如 CET 或 America/Los_Angeles。一个例外是 format-dateTime(),它旨在格式化供人类消费的数据。 format-dateTime() 的第五个参数是“位置”: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 规范只允许使用国家/地区代码,并且其含义模糊得多。