我试图了解如何将 IANA 时区映射到 Windows 时区。 我确实在这里看到了有关 TimeZoneConverter 的各种帖子,然后我开始使用它。但是,有一个问题我没有找到答案:
由于窗口到 IANA 时区是一对多,如果我们从 IANA 转换到 Windows,实际偏移量和 DST 标志是否有可能是错误的。例如,是否存在这样的情况:Windows 时区涵盖 2 小时的时间,而 IANA 对于这些小时(两个小时)中的每一个小时都有两个不同的时区。这样,如果我们获取第二个小时的 IANA 并将其转换为 Windows 时区,则实际偏移量将会有所不同/更改。
对于我们来说,能够从 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 区域名称之间的 ICU 映射(例如 this copy in the Noda Time repo ),您会发现它不是 1:1 映射。单个 Windows 时区 ID 可以映射到多个不同的 IANA ID,其中一个(地区 001)被视为主要映射。
我希望在绝大多数情况下,您会看到两者之间相同的结果 - 但绝对不能保证每个时区的每个瞬间都如此。
关于.net - IANA 到 Windows 时区的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71873777/