首页 > 解决方案 > 将带有时区信息的 XML 时间日期类型转换为本地时间

问题描述

我正在编写一个函数来转换 XML Time 数据类型的 XML 字段,我遇到了以下(实际)问题:

当添加了时区信息时,如何将 XML Time 日期类型实际转换为本地时间。

<MyTime>14:16:20+02:00</MyTime>

由于夏令时/夏令时之类的原因,它并不像将其转换为 UTC 时间 (12:16:20) 并将其转换回您的本地时间那么简单。如果您有日期部分,这不是问题,因为您也有日期转换回 UTC,然后转换为该日期的本地时间。但是由于夏令时/夏令时,+02:00也可能取决于时间是什么时候写的,当然还有位置。例如,在荷兰,如果我使用这样的应用程序,它将时区信息添加到 Time 数据类型中,在夏季将其写入14:16:20+02:00但在冬季它将是14: 16:20+01:00

因此,在不知道它何时编写的情况下,当从特定位置读取特定日期的 XML 时,我会得到以下信息:

Location           = The Netherlands
Date of converting = 10 august 2021 (summertime, +02:00)

'14:16:20'        =>  14:16:20 (as there is no timezone)
'14:16:20+02:00'  =>  14:16:20 (if using date) 
'14:16:20+01:00'  =>  15:16:20 (if using date)

Date of converting = 10 januari 2021 (wintertime, +01:00)

'14:16:20'        =>  14:16:20 (as there is no timezone)
'14:16:20+02:00'  =>  13:16:20 (if using date) 
'14:16:20+01:00'  =>  14:16:20 (if using date)

我在 W3C 规范中找不到如何处理它,就像总是使用像 1-1-1970 这样的虚构日期来转换为/从 UTC 转换。

我可能会忽略时区信息,除非它是Z+00:00,或者如果 testdate 已传递给函数。但也许有一种默认的处理方式,我只是在原始 W3C 规范中错过了它。

标签: xmldatetimetimetimezone

解决方案


您对您的技术限制没有说太多,但是在 XPath 3.1 中您可以使用format-dateTime($value, '[H01]:[M01]:[S01][Z01:01]', (), (), 'Europe/Amsterdam').

(实现可能在他们识别的时区名称上有所不同)。


推荐阅读