Die Hauptquelle für die Daten zur Konvertierung zwischen Windows- und IANA-Zeitzonen-IDs ist die windowsZones.xml
Datei, die im Rahmen des Unicode CLDR- Projekts verteilt wird. Die neueste Entwicklerversion finden Sie hier .
Allerdings wird CLDR nur zweimal jährlich veröffentlicht. Dies, zusammen mit der periodischen Trittfrequenz von Windows-Updates und den unregelmäßigen Updates der IANA-Zeitzonendatenbank, macht es kompliziert, nur die CLDR-Daten direkt zu verwenden. Beachten Sie, dass Zeitzonenänderungen selbst nach Lust und Laune der verschiedenen Regierungen der Welt vorgenommen werden und nicht alle Änderungen mit ausreichender Ankündigung vorgenommen werden, um in diese Veröffentlichungszyklen vor ihrem jeweiligen Inkrafttreten zu gelangen.
Es müssen einige andere Randfälle behandelt werden, die nicht ausschließlich von der CLDR abgedeckt werden, und von Zeit zu Zeit tauchen neue auf. Daher habe ich die Komplexität der Lösung in die TimeZoneConverter -Mikrobibliothek eingekapselt, die von Nuget aus installiert werden kann.
Die Verwendung dieser Bibliothek ist einfach. Hier einige Beispiele für die Konvertierung:
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"
Weitere Beispiele finden Sie auf der Projektseite .
Es ist wichtig zu erkennen, dass eine IANA-Zeitzone zwar einer einzelnen Windows-Zeitzone zugeordnet werden kann, das Gegenteil jedoch nicht der Fall ist. Eine einzelne Windows-Zeitzone kann mehreren IANA-Zeitzonen zugeordnet sein. Dies ist in den obigen Beispielen zu sehen, in denen Eastern Standard Time
sowohl auf America/New_York
als auch auf abgebildet ist America/Toronto
. TimeZoneConverter liefert diejenige, mit der CLDR markiert ist "001"
, die als "goldene Zone" bezeichnet wird, es sei denn, Sie geben speziell einen Ländercode an und es gibt eine Übereinstimmung für eine andere Zone in diesem Land.
Hinweis: Diese Antwort hat sich im Laufe der Jahre weiterentwickelt, sodass die folgenden Kommentare möglicherweise für die aktuelle Version gelten oder nicht. Überprüfen Sie den Bearbeitungsverlauf auf Details. Vielen Dank.
(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
gibtAsia/Calcutta
es sein sollteAsia/Kolkata
. es scheint, als ob dasTzdbDateTimeZoneSource
alte Werte enthält.