Fuseaux horaires7 min de lecture

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é : zoneinfo stocké 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.

VersionDateChangement majeur
2022gnov. 2022Chili : nouveaux noms pour Atacama/Magallanes
2023ddéc. 2023Groenland : Ittoqqortoormiit passe à UTC−2
2024afév. 2024Palestine : règles DST 2024
2025bmars 2025Paraguay : 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.

Pour aller plus loin