首页 > 解决方案 > 尝试将 Microsoft Windows BCL 区域映射到 Tzdb 区域以访问其缩写值

问题描述

我正在寻找一种将 BCL 时区值映射到 Tzdb 时区值的方法,以获得 Tzdb 公开的更具表现力的值:

例如,我可以按如下方式获取 BCL 时区。该incomingValue变量是该区域的 Microsoft Windows 名称,例如Pacific Standard Time来自https://support.microsoft.com/en-ca/help/973627/microsoft-time-zone-index-values

 var bclZone = DateTimeZoneProviders.Bcl.GetZoneOrNull(incomingValue); // ok - it works

接下来,获得等效 Tzdb 区域值(或区域)的最佳方法是什么?我一直在摆弄以下代码无济于事。

// The Tzdb provider won't accept a BCL zone value or a Microsoft zone name.
 DateTimeZoneProviders.Tzdb.GetZoneOrNull(.. ? ..);     

我要求进行这种转换的原因是因为 Tzdb 区域更具表现力,包含可在紧凑显示场景中使用的缩写,而我找不到与 Microsoft BCL 区域类型相关的缩写或其他丰富值。我宁愿使用 Tzdb 值而不是手动映射,因为我认为在这两个区域提供程序之间,它们包含我需要的一切“开箱即用”。

我也在考虑使用 UTC -/+ 计算来转换到 Tzdb 值,但我在这里询问是否有更好的 noda 方法。

标签: nodatime

解决方案


推荐阅读