IANA 到 Windows 时区映射

IANA to Windows timezone mapping

我想了解如何将 IANA 时区映射到 Windows 时区。 我确实在这里看到了关于 TimeZoneConverter 的各种帖子,并且我开始使用它。但是,有一个问题我没有找到答案:

由于 Window 到 IANA 时区是一对多的,如果我们从 IANA 转换到 Windows,实际偏移量和 DST 标志是否有可能是错误的。例如,是否存在 Windows 时区涵盖 2 小时的时间,而 IANA 对每个小时(两个小时)都有两个不同的时区的情况。这样,如果我们将第二个小时的 IANA 转换为 Windows 时区,则实际偏移量将为 different/changes.

能够从 IANA 进行映射 -> Windows 然后返回到 IANA 以获得相同的时区名称对我们来说不太重要。非常重要的是,当我们进行重新映射时,实际偏移量和 DST 标志不会改变。

谢谢

It is very important that when we do the re-mapping, the actual offsets and DST flags do not change.

这实际上要求 Windows 数据库和 IANA 数据库始终完全同步。虽然我能理解这种愿望,但这是不切实际的期望。撇开其他不谈,这两个数据库都会随着时间的推移而变化,因为政府会改变他们的规则。除非您确保同时更改两个版本(在您使用的所有机器上!),否则始终存在差异的可能性。除了在稳定状态下实际数据不同之外——这也会发生。

如果您查看 Windows 和 IANA 区域名称(例如 this copy in the Noda Time repo)之间的 ICU 映射,您会发现它不是 1:1 映射。单个 Windows 时区 ID 可以映射到多个不同的 IANA ID,其中一个(地区 001)被视为主要映射。

我希望在绝大多数情况下,您会看到两者之间的相同结果 - 但绝对不能保证在每个时区的每个瞬间。