Olson和Windows时间Id之间的转换在SO上多次出现;许多人建议Jon Skeet的Noda Time完成这项任务。
虽然Google Code页面指出有一个功能可以在两者之间进行转换,但我找不到有关如何执行此操作的详细信息。
有人能指出我正确的方向吗?
答案 0 :(得分:1)
不,不幸的是,我们目前没有这种方式的映射(Windows到Olson)。
现在,所有“提供者”界面都略有提升:
换句话说:抱歉,我们目前不支持此功能,但在尝试最终确定1.0 API时,我们会牢记这一点。
答案 1 :(得分:0)
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值进行简单迭代)。