TimezonEconverter est une bibliothèque légère à convertir rapidement entre les noms de fuseau horaire IANA, Windows et Rails.
Remarque: un package TimeZoneConverter.Posix
séparé est également disponible si vous avez besoin de support de fuseau horaire POSIX.
TimeZoneConverter
à votre projet.TimeZoneConverter
si nécessaire. À partir de la version 6.0.0, TimezonEconverter fonctionne avec tous les éléments suivants:
Les versions .NET Framework inférieures à 4,6.2 ne sont plus prises en charge.
.NET 6 a une prise en charge intégrée pour les fuseaux horaires IANA et Windows d'une manière multiplateforme, réduisant quelque peu le besoin de cette bibliothèque. Il s'appuie sur l'intégration de l'USI de .NET pour effectuer cette fonctionnalité. Voir le blog .NET pour plus de détails.
RETUST, si vous ciblez uniquement .NET 6 (ou supérieur), et que vous avez une plate-forme ou des soins intensifs d'application-local, vous n'aurez peut-être pas besoin d'utiliser cette bibliothèque. Cependant, il est en effet toujours pris en charge, et beaucoup ont constaté qu'il continue d'être utile dans certains environnements ou sur des plateformes spécifiques.
TimezonEconverter n'a pas de dépendances de données externes à l'exécution. Toutes les données dont elle a besoin est intégrée dans la bibliothèque elle-même.
Certaines fonctions de TimezonEconverter, telles que TZConvert.GetTimeZoneInfo
reposent sur l'objet TimeZoneInfo
sous-jacent ayant accès aux données de fuseau horaire du système d'exploitation. Sur Windows, ces données proviennent du registre et sont maintenues via les mises à jour Windows.
Sur OSX et Linux, ces données proviennent d'une distribution de la base de données du fuseau horaire IANA, généralement via le package tzdata
. Si votre environnement n'a pas installé le package tzdata
, vous devrez l'installer pour TZConvert.GetTimeZoneInfo
pour fonctionner correctement.
Par exemple, les images de Docker Alpine Linux pour .NET Core ne sont plus expédiées avec tzdata
. Voir dotnet / dotnet-docker # 1366 pour des instructions sur la façon de l'ajouter à vos images docker.
Cette bibliothèque utilise une combinaison de sources de données pour atteindre ses objectifs:
MAPPING
d' ActiveSupport::TimeZone
dans le code source Rails.Habituellement, ce dernier est réservé aux cas Edge et aux zones nouvellement introduites qui peuvent ou non avoir été publiées dans des sources officielles.
Important: Étant donné que ces données peuvent changer chaque fois que de nouveaux fuseaux horaires sont introduits à partir de l'une de ces sources, il est recommandé d'utiliser toujours la révision la plus récente et de vérifier régulièrement les mises à jour.
De plus, cette bibliothèque n'essaie pas de déterminer si les ID de fuseau horaire fournies sont réellement présents sur l'ordinateur où le code est en cours d'exécution. On suppose que l'ordinateur est à jour avec les mises à jour du fuseau horaire.
Par exemple, si l'on tente de convertir Africa/Khartoum
en ID de fuseau horaire Windows, il obtiendra Sudan Standard Time
. S'il est ensuite utilisé sur un ordinateur Windows qui n'a pas encore l'installation de KB4051956
(qui a créé ce fuseau horaire), ils obtiendront probablement un TimeZoneNotFoundException
.
Il est possible qu'une zone soit ininterrompue - ce qui signifie qu'il n'y a pas d'équivalent logique d'un type de fuseau horaire à un autre.
Actuellement, il n'y a qu'une seule zone IANA qui est impartiale pour les fenêtres, qui est Antarctica/Troll
. En d'autres termes, il n'y a pas de fuseau horaire "correct" pour les utilisateurs de Windows qui peuvent être stationnés à la station troll, en Antarctique. Par conséquent, si vous essayez de convertir Antarctica/Troll
en fenêtres, vous obtiendrez un TimeZoneNotFoundException
.
Il existe de nombreuses zones qui sont impartiables pour les rails. La liste complète est dans le code de test unitaire ici.
Convertissez un nom de fuseau horaire IANA en ID de fuseau horaire Windows le mieux ajusté.
string tz = TZConvert . IanaToWindows ( " America/New_York " ) ;
// Result: "Eastern Standard Time"
Convertissez un nom de fuseau horaire Windows au nom de fuseau horaire IANA le meilleur.
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " ) ;
// result: "America/New_York"
Convertissez un nom de fuseau horaire Windows au nom de fuseau horaire IANA le mieux approprié, en ce qui concerne un pays spécifique.
string tz = TZConvert . WindowsToIana ( " Eastern Standard Time " , " CA " ) ;
// result: "America/Toronto"
Obtenez un objet TimeZoneInfo
de .NET Core, quel que soit le système d'exploitation sur lequel vous utilisez:
// Either of these will work on any platform:
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " Eastern Standard Time " ) ;
TimeZoneInfo tzi = TZConvert . GetTimeZoneInfo ( " America/New_York " ) ;
Convertissez un nom de fuseau horaire des rails au nom de fuseau horaire IANA le mieux approprié.
string tz = TZConvert . RailsToIana ( " Mexico City " ) ;
// result: "America/Mexico_City"
Convertissez un nom de fuseau horaire des rails en ID de fuseau horaire Windows le mieux ajusté.
string tz = TZConvert . RailsToWindows ( " Mexico City " ) ;
// result: "Central Standard Time (Mexico)"
Convertissez un nom de fuseau horaire IANA en un ou plusieurs noms de fuseau horaire de rails.
IList < string > tz = TZConvert . IanaToRails ( " America/Mexico_City " ) ;
// Result: { "Guadalajara", "Mexico City" }
Convertissez un ID de fuseau horaire Windows en un ou plusieurs noms de fuseau horaire de rails.
IList < string > tz = TZConvert . WindowsToRails ( " Central Standard Time (Mexico) " ) ;
// Result: { "Guadalajara", "Mexico City" }
Il y a quelques aides supplémentaires que vous pourriez trouver utiles.
Ces propriétés fournissent des listes des différents types de fuseaux horaires connus de cette bibliothèque:
TZConvert.KnownIanaTimeZoneNames
TZConvert.KnownWindowsTimeZoneIds
TZConvert.KnownRailsTimeZoneNames
Si vous avez besoin d'une liste de fuseaux horaires applicables dans une région donnée, vous pouvez utiliser:
TZConvert.GetIanaTimeZoneNamesByTerritory()
Cette bibliothèque est fournie gratuitement, selon les termes de la licence du MIT.