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égion | Passage à l'heure d'été | Passage à l'heure d'hiver | Changement d'heure |
|---|---|---|---|
| États-Unis & Canada | 2e dimanche de mars | 1er dimanche de novembre | 02:00 → 03:00 locale |
| Union européenne | Dernier dimanche de mars | Dernier dimanche d'octobre | 01:00 UTC, +1 heure |
| Royaume-Uni | Dernier dimanche de mars | Dernier dimanche d'octobre | GMT ↔ BST |
| Australie (États concernés) | 1er dimanche d'octobre | 1er dimanche d'avril | Hé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.
| Transition | L'horloge fait | Effet sur l'heure locale |
|---|---|---|
| Passage à l'heure d'été | 02:00 → 03:00 | 02:00–02:59 n'existe jamais (le "trou") |
| Passage à l'heure d'hiver | 02:00 → 01:00 | 01: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.