Daylight Saving Time

Heure d'été expliquée : comment le DST affecte les timestamps Unix

L'heure d'été avance les horloges locales au printemps et les recule en automne. Les timestamps Unix sont immunisés (ils comptent toujours UTC), mais chaque conversion entre temps Unix et heure locale doit savoir si l'heure d'été est active. Ce guide explique ce qu'est le DST, où il s'applique, les bugs de trou et de chevauchement qu'il crée, et comment le gérer correctement.

Le DST et le temps Unix en une minute

L'heure d'été avance les horloges locales d'une heure au printemps et les recule d'une heure en automne. Un timestamp Unix ne bouge jamais — il compte les secondes UTC et tique tout droit à travers chaque transition — il est donc immunisé contre le DST. Ce qui change, c'est l'heure locale que tu affiches pour lui. Deux transitions causent presque tous les bugs DST : le trou du printemps, où une heure de temps local n'arrive jamais, et le chevauchement de l'automne, où une heure arrive deux fois. Le tableau ci-dessous indique quand les principales régions changent.

RégionPassage à l'heure d'étéPassage à l'heure d'hiverChangement d'heure
États-Unis & Canada2e dimanche de mars1er dimanche de novembre02:00 → 03:00 locale
Union européenneDernier dimanche de marsDernier dimanche d'octobre01:00 UTC, +1 heure
Royaume-UniDernier dimanche de marsDernier dimanche d'octobreGMT ↔ BST
Australie (États concernés)1er dimanche d'octobre1er dimanche d'avrilHémisphère sud — inversé

Qu'est-ce que l'heure d'été ?

L'heure d'été (DST) est la pratique d'avancer les horloges locales d'une heure pendant une partie de l'année pour prolonger la lumière du soir. Environ 70 pays l'appliquent actuellement, surtout aux latitudes tempérées. La transition est une discontinuité de l'heure de l'horloge murale, pas d'UTC — les timestamps Unix continuent de tiquer sans heurt à travers chaque avance et recul.

  • Hémisphère nord : les horloges avancent généralement en mars et reculent en octobre/novembre
  • Hémisphère sud : les horloges avancent en octobre et reculent en mars/avril
  • Les régions tropicales et équatoriales n'appliquent généralement pas le DST
  • Le DST ajoute une heure de lumière au soir mais ne change pas la quantité totale de lumière du jour

Comment les transitions DST affectent les timestamps Unix

Un timestamp Unix est le nombre de secondes écoulées depuis 1970 UTC, il ne peut donc ni sauter en avant ni se répéter. Ce qui change, c'est l'interprétation en heure locale de ces secondes. À une avance de printemps, l'horloge locale saute de 02:00 à 03:00 — l'heure d'horloge murale de 02:00 à 02:59 n'a jamais lieu localement. Au recul, l'horloge locale de 01:00 à 01:59 a lieu deux fois, avec une heure d'écart en UTC.

  • Aucun timestamp Unix n'est jamais sauté ni dupliqué par le DST
  • Un timestamp Unix donné correspond à une heure locale précise, décalage compris (PDT vs PST, BST vs GMT, etc.)
  • Une heure locale donnée peut correspondre à zéro (trou DST) ou deux (chevauchement DST) timestamps Unix
  • Utilise les noms IANA (America/Los_Angeles) pour que le DST soit appliqué pour toi ; ne code jamais en dur un décalage comme UTC−8 si le lieu applique le DST

Le trou et le chevauchement DST expliqués

Les deux transitions créent les deux bugs DST classiques. Le trou du printemps est la source la plus fréquente d'échecs de planification et de rappels — un événement fixé à 02:30 le jour de la transition n'existera pas localement. Le chevauchement de l'automne est le plus subtil — un événement à 01:30 le jour de la transition existe deux fois, à une heure d'écart. Chaque cas exige une politique explicite.

TransitionL'horloge faitEffet sur l'heure locale
Passage à l'heure d'été02:00 → 03:0002:00–02:59 n'existe jamais (le "trou")
Passage à l'heure d'hiver02:00 → 01:0001:00–01:59 a lieu deux fois (le "chevauchement")
  • Trou : ISO 8601 / RFC 3339 ne peut pas représenter sans ambiguïté une heure à l'intérieur du trou
  • Chevauchement : annote quelle occurrence avec un décalage explicite (UTC−5 vs UTC−4)
  • Python : zoneinfo gère trou/chevauchement via l'attribut fold (0 = première occurrence, 1 = seconde)
  • JavaScript Temporal : ZonedDateTime prend une option de désambiguïsation ("earlier", "later", "compatible", "reject")
  • Un cron à 02:30 dans un fuseau DST saute lors de l'avance ou se déclenche deux fois lors du recul — planifie en UTC si possible

Quelles régions appliquent le DST

L'adoption du DST est un patchwork et change régulièrement — consulte toujours les tzdata IANA actuelles plutôt que de coder une règle en dur. Ce qui suit est globalement exact pour 2026.

  • États-Unis : la plupart des États appliquent le DST (mars–novembre). L'Arizona (sauf la Navajo Nation) et Hawaï non
  • Canada : la plupart des provinces appliquent le DST. La Saskatchewan, la majeure partie du Yukon et (depuis 2026) la majeure partie de la Colombie-Britannique non
  • Union européenne : applique le DST (dernier dimanche de mars → dernier dimanche d'octobre). Un vote de 2019 pour l'abolir a été reporté
  • Royaume-Uni : applique le DST sous le nom de BST (UTC+1) en été
  • Mexique : a aboli le DST national en 2022 ; seules les municipalités frontalières alignées sur les États-Unis l'appliquent encore
  • Australie : seuls la NSW, le Victoria, la Tasmanie, l'ACT et l'Australie-Méridionale appliquent le DST (octobre–avril)
  • La majeure partie de l'Asie, de l'Afrique et de l'Amérique du Sud : pas de DST

Gérer le DST en toute sécurité dans le code

L'approche fiable est d'ancrer tout sur des timestamps Unix (ou des date-heures à fuseau IANA) et de traiter l'heure locale comme une question d'affichage.

  • Stocker : des secondes epoch Unix ou un datetime conscient du fuseau (p. ex. TIMESTAMPTZ dans Postgres)
  • Calculer : en UTC ou dans des bibliothèques de date-heure conscientes d'IANA (Temporal, zoneinfo, java.time)
  • Afficher : convertir vers le fuseau IANA de l'utilisateur au moment du rendu
  • Planifier : stocker le fuseau IANA à côté de l'heure murale locale pour les événements récurrents qui doivent rester à "9 h locale"
  • Ne stocke jamais l'abréviation EDT/PDT/CET en remplacement du nom IANA

La pression pour abolir le DST

Plusieurs assemblées ont voté pour abolir les changements d'heure semestriels ; peu de ces votes ont mené à de réels changements de politique. Activité récente notable :

  • 2022 : le Sénat américain a adopté à l'unanimité le Sunshine Protection Act, bloqué à la Chambre
  • 2022 : le Mexique a aboli le DST national
  • 2024 : Trump s'est publiquement opposé au DST permanent ; l'élan au Sénat a ralenti
  • 2026 : la Colombie-Britannique est passée en UTC−7 permanent ; la commission de l'Énergie et du Commerce de la Chambre américaine a fait avancer un nouveau texte d'abolition du DST
  • 2019 : l'UE a voté en principe pour abolir le DST mais a répétitivement retardé sa mise en œuvre

Références associées

FAQ

Le DST affecte-t-il les timestamps Unix ?
Non. Les timestamps Unix comptent les secondes UTC depuis 1970 et continuent sans heurt à travers chaque transition DST. Seule l'interprétation en heure locale de ces secondes change.
Qu'est-ce qu'une heure ambiguë ?
Une heure ambiguë est une heure locale qui correspond à deux instants UTC différents. Cela arrive au passage à l'heure d'hiver, quand l'horloge recule de 02:00 à 01:00 et que l'heure 01:00–01:59 a lieu deux fois. Lève l'ambiguïté avec un décalage explicite ou l'option fold / de désambiguïsation d'une bibliothèque.
Qu'arrive-t-il aux tâches planifiées à la transition DST ?
Une tâche cron dans un fuseau avec DST planifiée à 02:30 sera soit sautée (passage à l'heure d'été), soit exécutée deux fois (passage à l'heure d'hiver). La solution est de planifier en UTC ou d'utiliser un planificateur qui désambiguïse explicitement.
Faut-il utiliser "EST" ou "America/New_York" dans le code ?
America/New_York. Le nom IANA applique automatiquement EST (UTC−5) en hiver et EDT (UTC−4) en été. Coder en dur "EST" signifie que les valeurs sont fausses la moitié de l'année.
Comment gérer correctement le DST dans le code ?
Stocke et calcule en UTC (ou avec des date-heures à fuseau IANA) et convertis en heure locale seulement pour l'affichage. Utilise des noms de fuseau IANA comme America/New_York, jamais de décalages fixes ni d'abréviations comme EST, pour que le DST soit appliqué pour toi.
Quand commence et finit le DST en 2026 ?
Aux États-Unis, le DST commence à 02:00 locale le 8 mars 2026 (avance à 03:00) et finit à 02:00 locale le 1er novembre 2026 (recul à 01:00). Dans l'UE, les transitions sont le 29 mars et le 25 octobre 2026.