Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用XSLT将本地时间字符串转换为UTC_Xml_Xslt - Fatal编程技术网

Xml 使用XSLT将本地时间字符串转换为UTC

Xml 使用XSLT将本地时间字符串转换为UTC,xml,xslt,Xml,Xslt,我正在尝试将本地时间字符串和时区转换为UTC时间。到目前为止,我使用以下代码格式化: <localtime>2019-12-02T06:46:24.000</localtime> <timezone>America/Los_Angeles</timezone> 2019-12-02T06:46:24.000 美国/洛杉矶 只有当作为时区,我使用类似于:PT0H <xsl:variable name="ztime">

我正在尝试将本地时间字符串和时区转换为UTC时间。到目前为止,我使用以下代码格式化:

<localtime>2019-12-02T06:46:24.000</localtime>
<timezone>America/Los_Angeles</timezone>
2019-12-02T06:46:24.000
美国/洛杉矶
只有当作为时区,我使用类似于:PT0H

<xsl:variable name="ztime">
            <xsl:value-of select="adjust-dateTime-to-timezone($localTime, $timezone)"/>
</xsl:variable>


有没有办法从时区名称中获取时间偏移量?

一些XSLT处理器可能会在format-dateTime()的第五个($place)参数中识别IANA时区名称(Olson timezone)——这是在XSLT 3.0时间框架中引入的。您不能在
调整日期时间
中直接使用该参数,但通过适当的格式化参数,您可以使用format-dateTime()将IANA时区转换为实际偏移量。尽管夏令时仍然是一个问题:系统中没有任何东西可以告诉你当地时间是在夏季还是冬季


如果您使用的是Saxon,那么有一些扩展可用(需要Saxon PE或更高版本)。请参见
saxon:adjust-to-civil-time()
saxon:in-summer-time()

我认为有类似的web服务,您可以使用XSLT中的
doc
来“调用”,以传入时区描述并返回带有时区偏移量的结果。您可以使用XPath/XSLT 3.0中的
format-dateTime()
函数来获取偏移量。请注意,此操作的方向相反,即将给定日期时间调整为指定时区,因此这只是计算的开始。-还要注意,偏移量不仅取决于时区,还取决于日期和时间-例如,在您的示例中,偏移量为8小时,但在夏季的某个日期将为7小时。建议,与您的问题无关:当
xsl:variable/xsl:value of/@select
时,不要使用
xsl:variable select=“…”
也可以。谢谢您的解释