Convertisseur de fuseaux horaires, dates et heures UTC
Un appel à 9 h, une arrivée d’avion ou une entrée de journal serveur n’a de sens que si son fuseau horaire est connu. Convertissez une date et une heure entre villes pour connaître l’heure locale correspondante, vérifier le jour du calendrier et éviter les confusions liées aux changements d’heure.
Chargement de l'outil…
Pourquoi la conversion horaire dépend de la date
Un instant est un même moment partout dans le monde. L’heure locale est la façon dont l’horloge et le calendrier d’un lieu le décrivent. Quand la soirée s’achève à New York, on peut déjà être demain à Tokyo. Convertir l’heure sans la date risque de déplacer un rendez-vous au mauvais jour.
La date détermine aussi les règles applicables au fuseau. Paris et New York ont généralement six heures d’écart, mais leurs changements d’heure ont lieu à des dates différentes. À midi UTC le 15 janvier 2026, il est 13 h à Paris et 7 h à New York. Le 15 mars 2026, il est respectivement 13 h et 8 h : l’écart est de cinq heures.
Cette distinction compte pour organiser un appel international, comparer des horaires de vol, annoncer une diffusion en direct ou retrouver une erreur dans les journaux d’un serveur. Un anniversaire ou une autre date sans heure est un cas différent : c’est une date du calendrier, pas un instant à décaler selon le pays du lecteur.
Décalages UTC, GMT et fuseaux nommés
UTC sert de référence commune pour exprimer un instant. Un décalage comme UTC+05:45 signifie que l’horloge locale avance de cinq heures et 45 minutes sur UTC. Les décalages ne sont donc pas toujours des heures entières.
Un fuseau nommé, comme Europe/Paris ou America/New_York, fournit les règles permettant de connaître le décalage à une date donnée. Un décalage fixe comme +01:00 ne décrit pas les futurs changements d’heure. Préférez les fuseaux nommés pour les rendez-vous liés à un lieu ; une abréviation comme CST peut désigner plusieurs régions. La base de fuseaux horaires IANA maintient les règles utilisées par de nombreux systèmes et langages de programmation (en anglais).
Pour les conversions d’heure civile courantes, GMT et UTC indiquent tous deux un décalage nul. Cela ne signifie pas que Londres conserve ce décalage toute l’année : utilisez Europe/London pour son heure locale, y compris ses changements estivaux.
Un même instant peut correspondre à plusieurs dates
Toutes ces lectures correspondent au 15 janvier 2026 à 23 h 30 UTC :
| Fuseau horaire | Date locale | Heure locale, format 24 h | Décalage UTC |
|---|---|---|---|
UTC | 15 janvier 2026 | 23:30 | +00:00 |
America/New_York | 15 janvier 2026 | 18:30 | -05:00 |
Europe/Paris | 16 janvier 2026 | 00:30 | +01:00 |
Asia/Kathmandu | 16 janvier 2026 | 05:15 | +05:45 |
Asia/Tokyo | 16 janvier 2026 | 08:30 | +09:00 |
Au format 12 heures, minuit s’écrit 12 AM et midi 12 PM. Au format 24 heures, ils s’écrivent 00:00 et 12:00. Changer le format d’affichage ne modifie ni l’instant ni le fuseau.
Changements d’heure : heures absentes et répétées
Quand les horloges avancent, certaines heures locales n’existent pas. Dans America/New_York, le 8 mars 2026 à 02:30 est une heure sautée. Quand les horloges reculent, une heure peut se produire deux fois : le 1er novembre 2026 à 01:30 dans ce même fuseau peut correspondre à 05:30 UTC ou à 06:30 UTC. Une date, une heure locale et un fuseau ne désignent donc pas toujours un instant unique.
Pour une heure répétée, précisez l’occurrence souhaitée ou son décalage UTC. Pour une heure absente, choisissez une heure locale valide. Ajouter 24 heures réelles peut aussi donner une heure différente le lendemain ; un rendez-vous récurrent à 9 h doit conserver son heure locale et son fuseau nommé. Maintenez les données de fuseaux à jour, car les gouvernements peuvent modifier les règles futures.
Convertir les fuseaux horaires en JavaScript
Partez d’un horodatage sans ambiguïté, avec Z pour UTC ou un décalage explicite. Un objet JavaScript Date représente l’instant ; Intl.DateTimeFormat l’affiche dans le fuseau choisi sans le modifier :
const instant = new Date("2026-01-15T23:30:00Z");
const formatter = new Intl.DateTimeFormat("fr-FR", {
timeZone: "Asia/Tokyo",
year: "numeric", month: "2-digit", day: "2-digit",
hour: "2-digit", minute: "2-digit", second: "2-digit",
hourCycle: "h23"
});
console.log(formatter.format(instant)); // 16/01/2026 08:30:00
console.log(instant.toISOString()); // 2026-01-15T23:30:00.000Z
console.log(instant.getTime()); // Millisecondes Unix : 1768519800000
console.log(instant.getTime() / 1000); // Secondes Unix : 1768519800
N’ajoutez pas manuellement le décalage de Tokyo à l’horodatage : cela changerait l’instant. Ne reconvertissez pas non plus une chaîne d’affichage localisée en objet Date. Une chaîne date-heure sans décalage peut utiliser le fuseau local de l’environnement, et Intl.DateTimeFormat formate des instants sans résoudre une saisie locale arbitraire. Consultez les références MDN de Date et d’Intl.DateTimeFormat.
Convertir les fuseaux horaires en Python
Python inclut zoneinfo depuis la version 3.9. Utilisez un objet datetime avec fuseau, puis appelez astimezone() pour exprimer le même instant ailleurs :
from datetime import datetime
from zoneinfo import ZoneInfo
instant = datetime.fromisoformat("2026-01-15T23:30:00+00:00")
tokyo = instant.astimezone(ZoneInfo("Asia/Tokyo"))
new_york = instant.astimezone(ZoneInfo("America/New_York"))
print(tokyo.isoformat()) # 2026-01-16T08:30:00+09:00
print(new_york.isoformat()) # 2026-01-15T18:30:00-05:00
zoneinfo utilise les données de fuseaux du système ou le paquet tzdata, particulièrement utile sous Windows. Pour une saisie locale, vérifiez les heures absentes et résolvez explicitement les heures répétées ; ajouter un fuseau ne valide pas à lui seul une heure locale inexistante. L’attribut fold distingue les deux occurrences d’une heure répétée. La documentation officielle de zoneinfo, partiellement traduite, explique ces comportements et les sources de données ; la version anglaise fournit le texte original complet.
Enregistrer des horodatages sans perdre leur sens
Pour des journaux ou des événements passés, conservez un instant sans ambiguïté, souvent en UTC, puis convertissez-le pour l’affichage. Pour de futurs horaires locaux, gardez aussi le fuseau nommé et la date et l’heure locales prévues. Un décalage seul ne peut pas préserver un horaire local récurrent si les règles changent.
Utilisez un format d’échange explicite comme 2026-01-15T23:30:00Z plutôt qu’une chaîne dépendant des conventions locales comme 01/02/2026 09:00. La RFC 3339 définit un format d’horodatage Internet fondé sur ISO 8601 (en anglais). Si une API utilise des horodatages Unix, vérifiez si elle attend des secondes ou des millisecondes ; getTime() en JavaScript renvoie des millisecondes.
Pour mesurer la durée d’exécution de code, utilisez une horloge de temps écoulé plutôt que des conversions de dates. Notre article sur la mesure des performances JavaScript explique cette distinction.
Les conversions couvrent 1900–2100 à la seconde entière, selon les données de fuseaux du navigateur. Les secondes intercalaires et les fractions de seconde sont exclues. Les données peuvent être incomplètes pour les dates anciennes ou obsolètes pour les règles futures. Cet outil traite vos données sur votre appareil. Le texte, les fichiers ou les mots de passe saisis et les résultats produits ne sont envoyés ni à nos serveurs ni à un autre serveur. Le chargement des pages et de leurs ressources génère des requêtes. En production, les pages chargent aussi Google Tag Manager, Cloudflare Web Analytics et les publicités AdSense ; le code des outils ne transmet ni vos saisies ni vos résultats aux services de mesure ou de publicité. Consultez notre politique de confidentialité. Pour examiner les requêtes pendant l'utilisation de l'outil, ouvrez les outils de développement de votre navigateur, puis l'onglet Réseau. Faites un essai avec des données fictives. Consultez Comment examiner les requêtes réseau dans Chrome, Firefox, Edge et Safari.Comment utiliser cet outil
Vos données restent dans votre navigateur