Niestety obecnie nie ma standardowej funkcjonalności do tego.
Umożliwia sprawdzenie (za pomocą reflektora), w jaki sposób działa metoda TimeZoneInfo.FindSystemTimeZoneById(). To zajmuje tylko jedną z wartości z pola s_systemTimeZones:
private static Dictionary<string, TimeZoneInfo> s_systemTimeZones
{
get
{
if (s_hiddenSystemTimeZones == null)
{
s_hiddenSystemTimeZones = new Dictionary<string, TimeZoneInfo>();
}
return s_hiddenSystemTimeZones;
}
set
{
s_hiddenSystemTimeZones = value;
}
}
To pole przechowuje wszystkie dostępne TimeZoneInfo-S. A kiedy zadzwonisz do FindSystemTimeZoneById (id), po prostu wybrałeś wartość ze wstępnie wypełnionego słownika. Nie wiem, kiedy ten słownik się uruchamia i jakie wartości używa do inicjowania. Ale facet z this thread powiedział, że TimeZoneInfo użyć wartości z rejestru: HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ strefy czasowe
Najbardziej oczywistym sposobem jest stworzenie własnego słownika słownika i wypełnić go z wartościami. Coś takiego:
Dictionary<string, TimeZoneInfo> dictionary = new Dictionary<string, TimeZoneInfo>();
TimeZoneInfo info = new TimeZoneInfo("ID", new TimeSpan(0, 1, 0, 0), "SomeCultureName", "Some Standard Time", "Some Daylight Time", null, true);
dictionary.Add("Some time", info);
Ale jest jeszcze jeden problem: konstruktor TimeZoneInfo jest prywatny. Więc jeśli chcesz użyć funkcji FindSystemTimeZoneById() i ConvertTimeFromUtc(), powinieneś zaimplementować ją od zera. Utwórz klasę reprezentującą strefę czasową, utwórz i wypełnij słownik tej klasy informacjami o strefach czasowych i tak dalej ...
Niezbyt dobra wiadomość, wiem. Ale mam nadzieję, że będzie użyteczny dla ciebie :)
Hmm. W rzeczywistości nie korzystałem z pobierania IANA - właśnie skopiowałem zawartość/etc/zoneinfo z najbliższego komputera z systemem Linux w naszej sieci. Okazuje się, że pliki IANA są w formacie tekstowym i trzeba je uruchomić przez kompilator strefy czasowej ("zic"). Źródło "zic" znajduje się również na tej samej stronie IANA; ale myślę, że łatwiej jest używać plików binarnych, jeśli masz maszynę Linux, aby je pobrać. –
Oto [wersja na GitHub] (https://github.com/mono/mono/tree/master/mcs/class/System.Core/System). –