Mam dziwny problem, którego nie mogę rozwiązać. Kiedy zadzwonię na numer TimeZoneInfo.GetSystemTimeZones
na moim komputerze z Win 7 x 64, otrzymuję 101 wyników. Kiedy wywołuję TimeZoneInfo.FindSystemTimeZoneById
na każdym z nich i przekazuję atrybut StandardName obiektu TimeZoneInfo, 3 z nich rzucają TimeZoneNotFoundException.Dlaczego niektóre strefy czasowe są zwracane przez GetSystemTimeZones nie znalezione przez FindSystemTimeZoneById?
Oto próbka:
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();
ten ma problem ze znalezieniem "uniwersalny czas koordynowany", "Jerozolima Standard Time" i "Półwysep Malajski Standard Time". Biorąc sprawę jak Malezji, widzę dla niego wpis, gdy patrzę na dostępnych stref czasowych w ustawieniach regionalnych, chociaż to pokazano atrybutu DisplayName zamiast StandardName:
Jednak mogę nie widać tego pod żadną nazwą podczas przeglądania rejestru w HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Strefy czasowe
Co tu się dzieje? Dlaczego strefa czasowa Malezji nie może być załadowana według nazwy?
Proszę nie wprowadzać alternatywnych implementacji stref czasowych za pomocą innych bibliotek - na razie chcę tylko przejść do sedna tego problemu. Dzięki!
Dziwne jak mój kod wygląda z perspektywy czasu (tj. Brakuje mu boleśnie oczywistego), to także dziwne, że tylko 3 z 101 TZ mają inny identyfikator niż standardowa nazwa! Okazuje się, że Malezja to "Singapore Standard Time". Proszę bardzo! –
@alex Czy mamy właściwość TimeZoneInfo.ID jako prawidłową właściwość? –