我试图了解如何将IANA时区映射到Windows时区.

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

对于我们来说,能够从IANA绘制 map 就不那么重要了->Windows,然后返回IANA以获得相同的时区名称.非常重要的是,当我们重新映射时,实际偏移量和DST标志不会改变.

非常感谢.

推荐答案

非常重要的是,当我们重新映射时,实际偏移量和DST标志不会改变.

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

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

我预计,在绝大多数情况下,你会看到两者之间的结果是相同的——但肯定不能保证在每个时区的每一刻都是如此.

.net相关问答推荐

使用EFCore.BulkExtensions库方法BulkInertOrUpdate时区分插入和更新的记录

如何将 select 语句详细信息提取到不同的方法中仍然保持Eager 加载?

如何将 Assembly.CodeBase 转换为 C# 中的文件系统路径?

如何在 C# 中自动删除临时文件?

判断 Windows 路径中是否存在可执行文件

比较 C# 中的双精度值

Automapper:使用 ReverseMap() 和 ForMember() 进行双向映射

如何在 WPF 中创建/制作圆角按钮?

数据库架构更改后更新 LINQ to SQL 类的最佳方法

String 是原始类型吗?

软件包版本始终为 1.0.0,带有 dotnet pack

react 式扩展使用的好例子

String.Replace() 与 StringBuilder.Replace()

如何从 .NET 读取 PEM RSA 私钥

将月份 int 转换为月份名称

Microsoft.Bcl.Build NuGet 包有什么作用?

如何向 C# Winforms 中的标签添加提示或工具提示?

如何重新启动 WPF 应用程序?

在foreach循环中修改列表的最佳方法是什么?

Uri.Host 和 Uri.Authority 有什么区别