Olson时区Id使用Noda时间转换为Windows标准格式
本文关键字:Windows 标准 格式 转换 时间 时区 Id 使用 Noda Olson | 更新日期: 2023-09-27 18:21:05
Olson和Windows时间Id之间的转换在SO上出现了多次;许多人建议Jon Skeet的Noda Time来完成这项任务。
虽然谷歌代码页面上说有一个函数可以在两者之间转换,但我在任何地方都找不到如何做到这一点的详细信息。
有人能给我指正确的方向吗?
不,不幸的是,我们目前没有这样的映射(Windows到Olson)。
所有的"提供商"接口现在都有点悬而未决:
- 即使在当前代码中,我们也希望对API进行更改,部分原因是为了使使用它的代码更具可测试性
- Unicode CLDR映射在1.x和2.x之间发生了变化,因此现在每种方式都有多个映射,可能是(IIRC)
换句话说:很抱歉,我们目前不支持这一点,但当我们试图最终确定1.0 API时,我们会记住这一点。
TzdbTimeZoneProvider
支持从Windows到Olson的转换,但BclTimeZoneProvider
(Windows时区的提供程序)没有正确实现MapTimeZoneId
方法,接口似乎错误。。。
以下是TzdbTimeZoneProvider
:的实现
public string MapTimeZoneId(TimeZoneInfo zone)
{
string str;
this.windowsIdMap.TryGetValue(zone.Id, out str);
return str;
}
注意:windowsIdMap是一个字典
以下是BclTimeZoneProvider
:的实现
public string MapTimeZoneId(TimeZoneInfo timeZone)
{
return timeZone.Id;
}
注意:它只返回windows时区的id。
似乎这种方法更正确的接口是:
string MapTimeZoneId(string providerZoneId);
然后这两种实现都可以正确完成。我想你可以在Noda Time的谷歌小组里提出这个问题。
现在,您可以查看TzdbTimeZoneProvider
来找到如何从Olson映射到Windowstz的方法(通过windowsIdMap值进行简单迭代)。