Vue d’ensemble des fuseaux horaires
La classe TimeZoneInfo simplifie la création d’applications prenant en charge les fuseaux horaires. La classe TimeZone prend en charge l’utilisation du fuseau horaire local et du temps universel coordonné (UTC). La classe TimeZoneInfo prend en charge ces deux zones ainsi que tout fuseau horaire sur lequel les informations sont prédéfinies dans le registre. Vous pouvez également utiliser TimeZoneInfo pour définir des fuseaux horaires personnalisés sur lesquels le système ne dispose d’aucune information.
Éléments principaux des fuseaux horaires
Un fuseau horaire est une région géographique dans laquelle la même heure est utilisée. En général, mais pas toujours, des fuseaux horaires adjacents ont une heure d’écart. L’heure dans n’importe quel fuseau horaire du monde peut être exprimée comme un décalage par rapport au temps universel coordonné (UTC).
La plupart des fuseaux horaires du monde prennent en charge l’heure d’été. L’heure d’été essaie d’optimiser les heures de clarté en avançant l’heure d’une heure au printemps ou au début de l’été, puis en rétablissant l’heure normale (ou standard) à la fin de l’été ou en automne. Ces variations par rapport à l’heure d’hiver sont appelées règles d’ajustement.
Le passage à l’heure d’été ou à l’heure d’hiver dans un fuseau horaire particulier peut être défini par une règle d’ajustement fixe ou flottante. Une règle d’ajustement fixe définit une date particulière à laquelle le passage à l’heure d’été ou à l’heure d’hiver se produit chaque année. Par exemple, le passage à l’heure d’hiver qui se produit chaque année le 25 octobre suit une règle d’ajustement fixe. Les règles d’ajustement flottantes sont beaucoup plus courantes. Elles définissent un jour particulier d’une semaine particulière d’un mois particulier pour le passage à l’heure d’été ou à l’heure d’hiver. Par exemple, le passage à l’heure d’été qui se produit le troisième dimanche de mars suit une règle d’ajustement flottante.
Pour les fuseaux horaires qui prennent en charge des règles d’ajustement, le passage à l’heure d’hiver et à l’heure d’été crée deux types d’heures anormales : des heures non valides et des heures ambiguës. Une heure non valide est une heure inexistante, créée par le passage à l’heure d’été. Par exemple, si cette transition se produit sur un jour particulier à 2 h 00 et que le temps passe à 3 h 00, chaque intervalle de temps compris entre 2 h 00 et 2 h 59 h 59 n’est pas valide. Une heure ambiguë est une heure qui peut correspondre à deux heures différentes dans un même fuseau horaire. Elle est créée par le passage à l’heure d’hiver. Par exemple, si cette transition se produit sur un jour particulier à 2 h 00 et que le temps passe à 1 h 00, chaque intervalle de temps compris entre 1 h 00 et 1 h 59 h 59 peut être interprété comme une heure standard ou une heure d’été.
Terminologie relative aux fuseaux horaires
Le tableau suivant définit les termes couramment utilisés lors de l’utilisation de fuseaux horaires et du développement d’applications prenant en charge les fuseaux horaires.
Terme | Définition |
---|---|
Règle d’ajustement | Règle qui définit les dates de passage à l’heure d’été et de retour à l’heure d’hiver. Chaque règle d’ajustement comporte une date de début et de fin qui définit quand la règle est en place (par exemple, la règle d’ajustement est en place du 1er janvier 1986 jusqu’au 31 décembre 2006), un delta (la valeur selon laquelle l’heure d’hiver change suite à l’application de la règle d’ajustement) et des informations sur la date et l’heure spécifiques auxquelles les transitions doivent avoir lieu pendant la période d’ajustement. Les transitions peuvent suivre une règle fixe ou une règle flottante. |
Heure ambiguë | Heure qui peut correspondre à deux heures différentes dans un même fuseau horaire. Cela se produit lorsque l’heure de l’horloge est retardée, comme lors du passage à l’heure d’hiver dans un fuseau horaire. Par exemple, si cette transition se produit sur un jour particulier à 2 h 00 et que le temps passe à 1 h 00, chaque intervalle de temps compris entre 1 h 00 et 1 h 59 h 59 peut être interprété comme une heure standard ou une heure d’été. |
Règle fixe | Règle d’ajustement qui définit une date particulière pour le passage à l’heure d’été ou à l’heure d’hiver. Par exemple, le passage à l’heure d’hiver qui se produit chaque année le 25 octobre suit une règle d’ajustement fixe. |
Règle flottante | Règle d’ajustement qui définit un jour particulier d’une semaine particulière d’un mois particulier pour le passage à l’heure d’été ou à l’heure d’hiver. Par exemple, le passage à l’heure d’été qui se produit le troisième dimanche de mars suit une règle d’ajustement flottante. |
Heure non valide | Heure inexistante, créée par le passage à l’heure d’été. Elle intervient lorsque l’heure est avancée, par exemple lors du passage de l’heure d’hiver d’un fuseau horaire à son heure d’été. Par exemple, si cette transition se produit sur un jour particulier à 2 h 00 et que le temps passe à 3 h 00, chaque intervalle de temps compris entre 2 h 00 et 2 h 59 h 59 n’est pas valide. |
Durée de transition | Informations sur un changement d’heure spécifique, tel que le passage de l’heure d’été à l’heure d’hiver, ou vice versa, dans un fuseau horaire particulier. |
Fuseaux horaires et classe TimeZoneInfo
Dans .NET, un objet TimeZoneInfo représente un fuseau horaire. La classe TimeZoneInfo inclut une méthode GetAdjustmentRules qui retourne un tableau d’objets TimeZoneInfo.AdjustmentRule. Chaque élément de ce tableau fournit des informations sur la transition vers et depuis l’heure d’été pendant une période donnée. (Pour les fuseaux horaires qui ne prennent pas en charge l’heure d’été, la méthode retourne un tableau vide.) Chaque objet TimeZoneInfo.AdjustmentRule a une DaylightTransitionStart et une propriété DaylightTransitionEnd qui définit la date et l’heure particulières de la transition vers et depuis l’heure d’été. La propriété IsFixedDateRule indique si cette transition est fixe ou flottante.
.NET s’appuie sur les informations de fuseau horaire fournies par le système d’exploitation Windows et stockées dans le registre. En raison du nombre de fuseaux horaires terrestres, tous les fuseaux horaires existants ne sont pas représentés dans le registre. En outre, étant donné que le registre est une structure dynamique, des fuseaux horaires prédéfinis peuvent y être ajoutés ou supprimés. Enfin, le registre ne contient pas nécessairement de données de fuseau horaire historique. Par exemple, dans Windows XP, le registre contient des données sur un seul ensemble d’ajustements de fuseau horaire. Windows Vista prend en charge les données de fuseau horaire dynamiques, ce qui signifie qu’un seul fuseau horaire peut avoir plusieurs règles d’ajustement qui s’appliquent à des intervalles d’années spécifiques. Toutefois, la plupart des fuseaux horaires définis dans le Registre Windows Vista et qui prennent en charge l’heure d’été n’ont qu’une ou deux règles d’ajustement prédéfinies.
La dépendance de la classe TimeZoneInfo sur le registre signifie qu’une application prenant en charge les fuseaux horaires ne peut pas être sûre qu’un fuseau horaire particulier est défini dans le registre. Par conséquent, la tentative d’instancier un fuseau horaire spécifique (autre que le fuseau horaire local ou le fuseau horaire qui représente l’heure UTC) doit utiliser la gestion des exceptions. Elle doit également fournir une méthode permettant à l’application de poursuivre si un objet TimeZoneInfo requis ne peut pas être instancié.
Pour gérer l’absence d’un fuseau horaire requis, la classe TimeZoneInfo inclut une méthode CreateCustomTimeZone, que vous pouvez utiliser pour créer des fuseaux horaires personnalisés introuvables dans le registre. Pour plus d’informations sur la création d’un fuseau horaire personnalisé, consultez Guide pratique pour créer des fuseaux horaires sans règles d’ajustement et Guide pratique pour créer des fuseaux horaires avec des règles d’ajustement. En outre, vous pouvez utiliser la méthode ToSerializedString pour convertir un fuseau horaire nouvellement créé en chaîne et l’enregistrer dans un magasin de données (par exemple, une base de données, un fichier texte, le registre ou une ressource d’application). Vous pouvez ensuite utiliser la méthode FromSerializedString pour convertir cette chaîne en objet TimeZoneInfo. Pour plus d’informations, consultez Guide pratique pour enregistrer des fuseaux horaires dans une ressource incorporée et comment : restaurer des fuseaux horaires à partir d’une ressource incorporée.
Étant donné que chaque fuseau horaire est caractérisé par un décalage de base par rapport à l’heure UTC, ainsi que par un décalage par rapport à l’heure UTC qui reflète toutes les règles d’ajustement existantes, une heure dans un fuseau horaire peut être facilement convertie en une heure dans un autre fuseau horaire. À cet effet, l’objet TimeZoneInfo inclut plusieurs méthodes de conversion, y compris :
ConvertTimeFromUtc, qui convertit l’heure UTC en heure dans un fuseau horaire désigné.
ConvertTimeToUtc, qui convertit l’heure dans un fuseau horaire désigné en UTC.
ConvertTime, qui convertit l’heure dans un fuseau horaire désigné en heure dans un autre fuseau horaire désigné.
ConvertTimeBySystemTimeZoneId, qui utilise des identificateurs de fuseau horaire (au lieu d’objets TimeZoneInfo ) comme paramètres pour convertir l’heure d’un fuseau horaire désigné en heure d’un autre fuseau horaire désigné.
Pour plus d’informations sur la conversion d’heures entre fuseaux horaires, consultez Conversion d’heures entre fuseaux horaires.