Il y a une liste de tous les fuseaux horaires dans le registre:
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones Qui peut être chargé en utilisant:
ArrayList zones = new ArrayList();
using(RegistryKey key = Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones"))
{
string[] zoneNames = key.GetSubKeyNames();
foreach(string zoneName in zoneNames)
{
using(RegistryKey subKey = key.OpenSubKey(zoneName))
{
TimeZoneInformation tzi = new TimeZoneInformation();
tzi.Name = zoneName;
tzi.DisplayName = (string)subKey.GetValue("Display");
tzi.StandardName = (string)subKey.GetValue("Std");
tzi.DaylightName = (string)subKey.GetValue("Dlt");
object value = subKey.GetValue("Index");
if(value != null)
{
tzi.Index = (int)value;
}
tzi.InitTzi((byte[])subKey.GetValue("Tzi"));
zones.Add(tzi);
}
}
}
Où TimeZoneInformation est juste une classe qui stocke les informations pour un accès facile.
La description que vous cherchez est dans la valeur d'affichage.
Cette réponse semble fausse à plusieurs égards. Premièrement, le PO a demandé des noms traduits. Deuxièmement, vous pouvez simplement utiliser TimeZoneInfo.GetSystemTimeZones() au lieu du code indiqué. –