使用Noda Time的Olson时区ID到Windows标准格式
Olson和Windows时间Id之间的转换在SO上多次出现; 许多人建议Jon Skeet的Noda Time来完成这项任务。
虽然谷歌代码页面声明有一个function可以在两者之间进行转换,但我找不到有关如何执行此操作的详细信息。
谁能指出我正确的方向?
不,不幸的是,我们目前没有这种方式的映射(Windows到Olson)。
现在所有的“提供者”界面都略有提升:
- 即使在当前代码中,我们也希望进行API更改,部分原因是为了使代码更易于测试
- Unicode CLDR映射在1.x和2.x之间已经发生了变化,因此现在每种方式都有多个映射,可能是(IIRC)。
换句话说:抱歉,我们目前不支持此function,但在尝试最终确定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映射到Windows tz(通过windowsIdMap值进行简单迭代)。