在SO上多次出现了Olson与Windows时间ID之间的转换问题;许多人建议使用Jon Skeet的Noda Time来解决此问题。
虽然Google Code页面显示有用于两者之间进行转换的函数,但我无法找到如何执行此操作的详细信息。
请问有没有人能指导我一下?
虽然Google Code页面显示有用于两者之间进行转换的函数,但我无法找到如何执行此操作的详细信息。
请问有没有人能指导我一下?
TzdbTimeZoneProvider
支持从Windows时区转换到Olson时区,但BclTimeZoneProvider
(Windows时区的提供程序)没有正确实现MapTimeZoneId
方法,接口似乎有问题...
下面是TzdbTimeZoneProvider
的实现:
public string MapTimeZoneId(TimeZoneInfo zone)
{
string str;
this.windowsIdMap.TryGetValue(zone.Id, out str);
return str;
}
public string MapTimeZoneId(TimeZoneInfo timeZone)
{
return timeZone.Id;
}
string MapTimeZoneId(string providerZoneId);
那么这两种实现都可以正确完成。我猜你可以把这个问题放在 Noda Time 的谷歌群组里。
现在你可以查看 TzdbTimeZoneProvider
,找到从 Olson 到 Windows 时区映射的方法(简单迭代通过 windowsIdMap 值)。
MapTimeZoneId
的目的是将 从 Windows 到提供程序特定 ID 进行映射。这就是为什么它需要一个 TimeZoneInfo
而不是一个字符串。 - Jon Skeet
DateTimeZone
对象,但是我认为不能进行转换。 - Ian Mercer