TimeZoneConverter ist eine leichte Bibliothek, die sich schnell zwischen den Namen IANA, Fenstern und Schienen umwandeln kann.
HINWEIS: Ein separates TimeZoneConverter.Posix
-Paket ist ebenfalls verfügbar, wenn Sie die POSIX -Zeitzonenunterstützung benötigen.
TimeZoneConverter
-Nuget -Paket Ihrem Projekt hinzu.TimeZoneConverter
-Namespace bei Bedarf. Ab Version 6.0.0 arbeitet TimeZoneConverter mit allen folgenden folgenden:
.NET Framework -Versionen weniger als 4,6,2 werden nicht mehr unterstützt.
.NET 6 hat eine integrierte Unterstützung für IANA- und Windows-Zeitzonen in plattformübergreifender Weise integriert, was die Notwendigkeit dieser Bibliothek etwas verringert. Es stützt sich auf die ICU -Integration von .NET, um diese Funktionalität auszuführen. Einzelheiten finden Sie im .Net -Blog.
Wenn Sie nur auf .NET 6 (oder höher) abzielen und entweder plattformgesteuerte oder App-Local ICU aktiviert sind, müssen Sie diese Bibliothek möglicherweise nicht verwenden. Es wird jedoch in der Tat noch unterstützt, und viele haben festgestellt, dass es in bestimmten Umgebungen oder auf bestimmten Plattformen weiterhin nützlich ist.
TimeZoneConverter hat zur Laufzeit keine externen Datenabhängigkeiten. Alle Daten, die sie benötigt, sind in die Bibliothek selbst eingebettet.
Einige Funktionen in TimeZoneConverter TimeZoneInfo
wie TZConvert.GetTimeZoneInfo
Unter Windows stammen diese Daten aus der Registrierung und werden über Windows -Updates verwaltet.
Unter OSX und Linux stammen diese Daten aus einer Verteilung der IANA -Zeitzonendatenbank, normalerweise über das tzdata
-Paket. Wenn Ihre Umgebung nicht über das tzdata
-Paket installiert ist, müssen Sie es für TZConvert.GetTimeZoneInfo
installieren, um korrekt zu funktionieren.
Beispielsweise werden die alpine Linux -Docker -Bilder für .NET Core nicht mehr mit tzdata
geliefert. Anweisungen zum Hinzufügen zu Ihren Docker-Bildern finden Sie in Dotnet/Dotnet-Docker#1366.
Diese Bibliothek verwendet eine Kombination von Datenquellen, um ihre Ziele zu erreichen:
MAPPING
von ActiveSupport::TimeZone
im Rails -Quellcode.Normalerweise ist letzteres für Kantenfälle und neu eingeführte Zonen vorbehalten, die möglicherweise noch in offiziellen Quellen veröffentlicht wurden oder nicht.
Wichtig: Da sich diese Daten ändern können, wenn neue Zeitzonen aus einer dieser Quellen eingeführt werden, wird empfohlen, dass Sie immer die aktuellste Revision verwenden und regelmäßig nach Aktualisierungen suchen.
Darüber hinaus versucht diese Bibliothek nicht festzustellen, ob die bereitgestellten Zeitzonen -IDs tatsächlich auf dem Computer vorhanden sind, auf dem der Code ausgeführt wird. Es wird angenommen, dass der Computer mit Zeitzonenaktualisierungen auf dem Laufenden gehalten wird.
Wenn man beispielsweise versucht, Africa/Khartoum
in eine Windows -Zeitzonen -ID umzuwandeln, erhält sie Sudan Standard Time
. Wenn es dann auf einem Windows -Computer verwendet wird, auf dem KB4051956
noch nicht installiert ist (was diese Zeitzone erstellt hat), erhalten sie wahrscheinlich eine TimeZoneNotFoundException
.
Es ist möglich, dass eine Zone unerträglich ist - was bedeutet, dass es kein logisches Äquivalent von einer Art von Zeitzone zu einer anderen gibt.
Derzeit gibt es nur eine IANA -Zone, die für Windows unerträglich ist, nämlich Antarctica/Troll
. Mit anderen Worten, es gibt keine "richtige" Zeitzone für Windows -Benutzer, die möglicherweise in der Trollstation, der Antarktis, stationiert sind. Wenn Sie also versuchen, Antarctica/Troll
in Windows umzuwandeln, erhalten Sie eine TimeZoneNotFoundException
.
Es gibt viele Zonen, die für Rails ungünstig sind. Die vollständige Liste befindet sich hier im Unit -Testcode.
Konvertieren Sie einen IANA -Zeitzonennamen in die am besten passende Windows -Zeitzonen -ID.
string tz = TZConvert . IanaToWindows ( " America/New_York " ) ;
// Result: "Eastern Standard Time"
Konvertieren Sie einen Windows -Zeitzonennamen in den am besten passenden Iana -Zeitzonennamen.
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " ) ;
// result: "America/New_York"
Konvertieren Sie einen Windows -Zeitzonennamen in den am besten passenden Iana -Zeitzonennamen in Bezug auf ein bestimmtes Land.
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " , " CA " ) ;
// result: "America/Toronto"
Holen Sie sich ein TimeZoneInfo
-Objekt von .NET Core, unabhängig davon, auf welchem Betriebssystem Sie ausführen:
// Either of these will work on any platform:
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " Eastern Standard Time " ) ;
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " America/New_York " ) ;
Konvertieren Sie einen Rails -Zeitzonennamen in den am besten passenden Iana -Zeitzonennamen.
string tz = TZConvert . RailsToIana ( " Mexico City " ) ;
// result: "America/Mexico_City"
Konvertieren Sie einen Rails -Zeitzonennamen in die am besten passende Windows -Zeitzone -ID.
string tz = TZConvert . RailsToWindows ( " Mexico City " ) ;
// result: "Central Standard Time (Mexico)"
Konvertieren Sie einen IANA -Zeitzonennamen in einen oder mehrere Rails -Zeitzonennamen.
IList < string > tz = TZConvert . IanaToRails ( " America/Mexico_City " ) ;
// Result: { "Guadalajara", "Mexico City" }
Konvertieren Sie eine Windows -Zeitzonen -ID in einen oder mehrere Rails -Zeitzonennamen.
IList < string > tz = TZConvert . WindowsToRails ( " Central Standard Time (Mexico) " ) ;
// Result: { "Guadalajara", "Mexico City" }
Es gibt einige zusätzliche Helfer, die Sie möglicherweise nützlich finden.
Diese Eigenschaften bieten Listen der verschiedenen Arten von Zeitzonen, die dieser Bibliothek bekannt sind:
TZConvert.KnownIanaTimeZoneNames
TZConvert.KnownWindowsTimeZoneIds
TZConvert.KnownRailsTimeZoneNames
Wenn Sie eine Liste von Zeitzonen benötigen, die in einer bestimmten Region anwendbar sind, können Sie verwenden:
TZConvert.GetIanaTimeZoneNamesByTerritory()
Diese Bibliothek wird im Rahmen der MIT -Lizenz kostenlos zur Verfügung gestellt.