Почему некоторые часовые пояса, возвращаемые GetSystemTimeZones, не найдены FindSystemTimeZoneById?
У меня есть странная проблема, которую я не могу решить. Когда я вызываю TimeZoneInfo.GetSystemTimeZones
на свою машину Win 7 x64, я получаю 101 результат. Когда я вызываю TimeZoneInfo.FindSystemTimeZoneById
на каждом из них и передаю атрибут StandardName объекта TimeZoneInfo, 3 из них вызывают TimeZoneNotFoundException.
Здесь пример:
var tzs = TimeZoneInfo.GetSystemTimeZones();
foreach (var timeZoneInfo in tzs.OrderBy(t => t.BaseUtcOffset))
{
try
{
TimeZoneInfo.FindSystemTimeZoneById(timeZoneInfo.StandardName);
}
catch (TimeZoneNotFoundException)
{
Console.WriteLine(timeZoneInfo.DisplayName + "|" + timeZoneInfo.StandardName + "|" + timeZoneInfo.BaseUtcOffset);
}
}
Console.ReadLine();
У этого есть проблемы с поиском "Скоординированное всеобщее время", "Стандартное время в Иерусалиме" и "Стандартное время полуострова Малай". Принимая такой случай, как Малайзия, я могу видеть запись для него, когда я просматриваю доступные часовые пояса в своих региональных настройках, хотя он показывает атрибут DisplayName, а не стандартное имя:
![Time zones]()
Однако я не могу видеть это под любым именем при просмотре реестра в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
Что здесь происходит? Почему часовое поясе Малайзии не может быть загружено по имени?
Пожалуйста, не используйте альтернативные варианты создания часовых поясов с использованием других библиотек. Сейчас я просто хочу разобраться в этом вопросе. Спасибо!
Ответы
Ответ 1
TimeZoneInfo.FindSystemTimeZoneById
метод принимает идентификатор часового пояса в качестве параметра. Вместо этого вы используете timeZoneInfo.StandardName
.
Кажется, что для этих трех зон значения для timeZoneInfo.StandardName
и TimeZoneInfo.Id
. Используя это:
TimeZoneInfo.FindSystemTimeZoneById(timeZoneInfo.Id);
решит проблему.