使用Noda Time的Olson时区ID到Windows标准格式

时间:2012-01-21 15:45:41

标签: c# asp.net time timezone

Olson和Windows时间Id之间的转换在SO上多次出现;许多人建议Jon Skeet的Noda Time完成这项任务。

虽然Google Code页面指出有一个功能可以在两者之间进行转换,但我找不到有关如何执行此操作的详细信息。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

不,不幸的是,我们目前没有这种方式的映射(Windows到Olson)。

现在,所有“提供者”界面都略有提升:

  • 即使在当前代码中,我们还要进行API更改,部分原因是为了使代码更易于测试
  • Unicode CLDR映射在1.x和2.x之间发生了变化,因此现在每种方式都有多个映射,可能是(IIRC)。

换句话说:抱歉,我们目前不支持此功能,但在尝试最终确定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值进行简单迭代)。