La source principale des données pour la conversion entre les identificateurs de fuseau horaire Windows et IANA est le windowsZones.xml
fichier, distribué dans le cadre du projet Unicode CLDR . La dernière version de développement peut être trouvée ici .
Cependant , le CLDR n'est publié que deux fois par an. Ceci, associé à la cadence périodique des mises à jour Windows et aux mises à jour irrégulières de la base de données de fuseaux horaires IANA, complique l'utilisation directe des données CLDR. Gardez à l'esprit que les changements de fuseau horaire eux-mêmes sont effectués au gré des différents gouvernements du monde, et que tous les changements ne sont pas effectués avec un préavis suffisant pour en faire ces cycles de publication avant leurs dates d'entrée en vigueur respectives.
Il y a quelques autres cas extrêmes qui doivent être traités qui ne sont pas strictement couverts par le CLDR, et de nouveaux surgissent de temps en temps. Par conséquent, j'ai encapsulé la complexité de la solution dans la micro-bibliothèque 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 y a plus d'exemples sur le site du projet .
Il est important de reconnaître que si un fuseau horaire IANA peut être mappé à un seul fuseau horaire Windows, l'inverse n'est pas vrai. Un seul fuseau horaire Windows peut être mappé à plusieurs fuseaux horaires IANA. Cela peut être vu dans les exemples ci-dessus, oùEastern Standard Time
est mappé à la fois America/New_York
et à America/Toronto
. TimeZoneConverter fournira celui avec lequel CLDR marque "001"
, connu sous le nom de "zone dorée", à moins que vous ne fournissiez spécifiquement un code de pays et qu'il y ait une correspondance pour une zone différente dans ce pays.
Remarque: Cette réponse a évolué au fil des ans, de sorte que les commentaires ci-dessous peuvent s'appliquer ou non à la révision actuelle. Consultez l'historique des modifications pour plus de détails. Merci.
(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
donneAsia/Calcutta
qu'il devrait êtreAsia/Kolkata
. il semble que leTzdbDateTimeZoneSource
contient d'anciennes valeurs.