Base IANA TZDB : comment fonctionnent les fuseaux horaires
Tous les systèmes (Linux, macOS, Java, Python, JavaScript) s'appuient sur la base IANA TZDB pour gérer les fuseaux. Voici comment elle fonctionne et pourquoi elle est mise à jour ~10 fois par an.
La IANA Time Zone Database (TZDB, anciennement Olson DB) est la base de référence mondiale pour les fuseaux horaires. Elle est intégrée dans Linux, macOS, Java, Python, .NET, PostgreSQL, et — via l'API Intl — dans tous les navigateurs modernes.
Pourquoi une base centralisée ?
Les fuseaux horaires ne sont pas immuables : chaque année, des gouvernements modifient leurs règles (abolition du DST, changement d'offset, fusion de fuseaux). Sans base de référence, chaque OS et chaque langage devraient maintenir leurs propres règles — au prix d'incohérences massives.
Structure de la TZDB
- Zones nommées
Continent/Ville(ex.Europe/Paris,America/Argentina/Buenos_Aires). - Liens (Link) : alias d'une zone vers une autre (
US/Eastern → America/New_York). - Règles (Rule) : transitions DST par année.
- Format binaire compilé :
zoneinfostocké dans/usr/share/zoneinfo/.
Cycle de mise à jour
La TZDB est mise à jour ~10 fois par an. Chaque version porte un identifiant (ex. 2026a, 2026b). Les distributions Linux poussent ces mises à jour via le paquet tzdata. Les navigateurs reçoivent les nouvelles règles via les mises à jour ICU.
| Version | Date | Changement majeur |
|---|---|---|
| 2022g | nov. 2022 | Chili : nouveaux noms pour Atacama/Magallanes |
| 2023d | déc. 2023 | Groenland : Ittoqqortoormiit passe à UTC−2 |
| 2024a | fév. 2024 | Palestine : règles DST 2024 |
| 2025b | mars 2025 | Paraguay : abandon du DST |
Utilisation en JavaScript
// Lister les fuseaux disponibles (depuis Node 18 / navigateurs modernes)
Intl.supportedValuesOf('timeZone');
// → ['Africa/Abidjan', 'Africa/Accra', ..., 'Pacific/Wallis']
// Formater une date dans un fuseau précis
new Intl.DateTimeFormat('fr-FR', {
timeZone: 'Asia/Tokyo',
dateStyle: 'full',
timeStyle: 'long'
}).format(new Date());
// → "dimanche 19 mai 2026 à 23:30:00 UTC+9"
Utilisation en Python
from zoneinfo import ZoneInfo # stdlib Python 3.9+
from datetime import datetime
paris = datetime.now(ZoneInfo("Europe/Paris"))
tokyo = paris.astimezone(ZoneInfo("Asia/Tokyo"))
print(tokyo) # 2026-05-19 23:30:00+09:00
Voir tous les fuseaux IANA en direct
Ne stockez jamais un décalage en dur
Erreur classique : stocker UTC+1 au lieu de Europe/Paris. À la prochaine transition DST, votre application calculera 14 h au lieu de 15 h. Stockez toujours le nom IANA et laissez la TZDB gérer les règles.
Cas d'usage et pièges
- Bug Brésil 2019 : suppression du DST annoncée tardivement → mises à jour TZDB en urgence.
- Russie 2014 : 11 fuseaux modifiés simultanément.
- Maroc 2018 : passage à DST permanent décidé 2 jours avant l'application.