我正在寻找一个表来将所有Olson TZID转换为Windows时区 . 我已经找到:
.NET TimeZoneInfo from Olson time zone
哪个很棒,可以根据以下信息构建:
http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml
但不幸的是,它只将一些TZID映射到Windows时区 . 有人遇到(或制作过)一张完整的 table 吗?
我正在寻找一个表来将所有Olson TZID转换为Windows时区 . 我已经找到:
.NET TimeZoneInfo from Olson time zone
哪个很棒,可以根据以下信息构建:
http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml
但不幸的是,它只将一些TZID映射到Windows时区 . 有人遇到(或制作过)一张完整的 table 吗?
5 回答
好的,所以我把 table 拼凑起来了 . 我很确定有很多不准确之处,并且有很多区域没有映射,但它现在可以用于我的目的 .
更新,以下页面也看起来有很好的信息:http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml
由于邮件大小的限制而不得不削减 - 在链接的地址获取完整的CSV .
静态表的问题在于,必须在释放TZDB和CLDR的更改时对其进行维护 .
更好的解决方案是使用可以为您进行转换的库,并将为您保留最新的更新 .
Noda Time是这个的完美选择 . 我已经在此帖中记录了如何在IANA / Olson和Windows时区之间进行转换:How to translate between Windows and IANA time zones?
随着TZDB和CLDR的新更新发布,您只需获取最新版本的Noda Time,或者您可以按照说明here手动更新 .
我在https://github.com/uddhav/tzid-from-geo/blob/master/olson_to_windows.json将XML http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml转换为JSON . 总共430 .
我最近需要这个映射用于c应用程序 . unicode映射涵盖了大多数区域,但存在一些问题 .
首先,许多olson / tz id都有别名 . unicode映射中使用的ID不包含这些别名 . 要获得更完整的映射,您的应用程序还需要了解别名 .
以下定义olson / tz别名:http://www.unicode.org/repos/cldr/trunk/common/bcp47/timezone.xml
例如,unicode映射没有'America / Argentina / Buenos_Aires'的定义,但是在上面的文件中我们看到'America / Argentina / Buenos_Aires'实际上是'America / Buenos_Aires'的别名,它确实存在于映射文件 .
其次,有一些olson / tz ID不能映射到任何Windows时区 . 这可能是因为Windows没有具有相同偏移量或DST规则的时区 . 在这些情况下,确实无法进行转换 . 大多数这些区域都是小岛屿,所以它可能是一个不值得考虑的边缘情况 .
有关详细信息,请参阅:http://cldr.unicode.org/development/development-process/design-proposals/extended-windows-olson-zid-mapping
下面以逗号分隔的列表包含以下三列:
[Windows Time Zone ID],[Region],[Olson TZID]
源自Zone to Tzid,并将具有多个TZID选项的分隔线分成单独的行 .
The list: