La source principale des données pour la conversion entre les identifiants de fuseaux horaires de Windows et de l'IANA est la base de données de l'IANA. windowsZones.xml
distribué dans le cadre du programme le CLDR d'Unicode projet. La dernière version de développement peut être trouvée aquí .
Cependant Le CLDR n'est publié que deux fois par an. Ceci, ajouté à la cadence périodique des mises à jour de Windows et aux mises à jour irrégulières de la base de données des fuseaux horaires de l'IANA, complique l'utilisation directe des données du CLDR. Gardez à l'esprit que les changements de fuseaux horaires sont effectués selon les caprices des différents gouvernements du monde, et que tous les changements ne sont pas effectués avec suffisamment de préavis pour être intégrés dans ces cycles de publication avant leurs dates d'entrée en vigueur respectives.
Il y a quelques autres cas particuliers qui doivent être traités et qui ne sont pas strictement couverts par le CLDR, et de nouveaux cas apparaissent de temps en temps. Par conséquent, j'ai encapsulé la complexité de la solution dans le fichier TimeZoneConverter qui peut être installée à partir de Nuget.
L'utilisation de cette bibliothèque est simple. Voici quelques exemples de conversion :
string tz = TZConvert.IanaToWindows("America/New_York");
// Result: "Eastern Standard Time"
string tz = TZConvert.WindowsToIana("Eastern Standard Time");
// result: "America/New_York"
string tz = TZConvert.WindowsToIana("Eastern Standard Time", "CA");
// result: "America/Toronto"
Il existe d'autres exemples sur le site du projet .
Il est important de reconnaître que si un fuseau horaire IANA peut être mis en correspondance avec un fuseau horaire Windows unique, l'inverse n'est pas vrai. Un seul fuseau horaire Windows peut être associé à plus d'un fuseau horaire IANA. C'est ce que l'on peut constater dans les exemples ci-dessus, où Eastern Standard Time
est mis en correspondance avec les deux America/New_York
et à America/Toronto
. TimeZoneConverter livrera celui que CLDR marque avec "001"
Il s'agit de la "zone dorée", à moins que vous ne fournissiez spécifiquement un code de pays et qu'il existe une correspondance pour une zone différente dans ce pays.
Remarque : cette réponse a évolué au fil des ans. Les commentaires ci-dessous peuvent donc s'appliquer ou non à la révision actuelle. Consultez l'historique des modifications pour plus de détails. Merci.