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.
Кажется, более правильным интерфейсом для этого метода будет:
string MapTimeZoneId(string providerZoneId);
Тогда обе реализации могут быть выполнены правильно. Я думаю, вы можете задать этот вопрос в группах Google Noda Time.
Пока вы можете заглянуть в TzdbTimeZoneProvider
, чтобы найти способ сопоставления Олсона с Windows tz (простая итерация по значениям windowsIdMap).