Comment convertir entre formats horaires

· 9 min de lecture

Les formats de temps varient selon les systèmes, les API et les pays. Horodatages Unix dans les réponses d'API, ISO 8601 dans les bases de données, horloges 12 heures aux États-Unis, horloges 24 heures en Europe, convertir entre eux est un besoin constant pour les développeurs et toute personne travaillant avec des données internationales. Comprendre pourquoi chaque format existe, où il brille et où il mord rend la conversion un réflexe rapide plutôt qu'une source récurrente de bugs subtils.

Une brève histoire des formats de temps

Standardiser le temps est plus vieux qu'internet. En 1884, la Conférence internationale du méridien a établi l'heure moyenne de Greenwich et le méridien d'origine, ce qui a donné au monde une référence commune pour la première fois. L'horloge 24 heures s'est répandue dans l'aviation et le militaire pour la même raison : elle supprime l'ambiguïté AM/PM qui transforme une réservation à minuit en vol à midi.

Le temps Unix est arrivé avec le noyau Unix d'origine en 1971, comptant les secondes depuis le 1er janvier 1970 UTC ("l'epoch"). Le choix était pragmatique : un entier 32 bits pouvait couvrir des décennies, trier des horodatages revenait à trier des nombres, et calculer des intervalles était une soustraction. ISO 8601 est arrivé en 1988 pour standardiser le côté lisible : année-mois-jour en ordre gros-boutiste, T comme séparateur date/heure, et Z pour UTC. RFC 3339 (2002) est un profil plus restrictif d'ISO 8601 conçu pour les protocoles internet. RFC 2822 (2001) définit le format style courriel avec noms de jours et offsets. Chaque format résout un vrai problème ; aucun ne remplace les autres entièrement.

Formats de temps courants

Six formats couvrent presque tout ce que vous rencontrerez dans la nature. La première colonne est le nom que vous verrez dans la documentation ; la colonne d'exemple montre à quoi ressemble 14:30 le 7 avril 2024 UTC.

FormatExempleUtilisé par
Horodatage Unix (secondes)1712502600API, bases de données, jetons JWT, lignes de log
Horodatage Unix (ms)1712502600000JavaScript, Java, Android
Horodatage Unix (microsecondes)1712502600000000Postgres, Kafka, OpenTelemetry
ISO 8601 / RFC 33392024-04-07T14:30:00ZAPI JSON, bases de données, logs
RFC 2822Sun, 07 Apr 2024 14:30:00 +0000En-têtes de courriel, en-têtes HTTP
24 heures14:30Europe, militaire, aviation
12 heures2:30 PMUS, usage informel
Jour de l'année (julien)2024-098Avionique, données scientifiques
Date semaine2024-W14-7Planification industrielle, banque

La plupart des équipes se fixent sur les millisecondes Unix pour le stockage et ISO 8601 pour le transit, avec des formats d'affichage choisis par locale. Le choix compte moins que la cohérence : choisissez un format principal, documentez-le, et convertissez aux bords.

Référence rapide de conversion

12 heures vers 24 heures

L'horloge 12 heures a deux particularités : 12 AM est minuit (le début du jour) et 12 PM est midi. Le tableau ci-dessous couvre les cas qui piègent les gens.

12 heures24 heures
12:00 AM (minuit)00:00
1:00 AM01:00
11:59 AM11:59
12:00 PM (midi)12:00
12:01 PM12:01
1:00 PM13:00
6:00 PM18:00
11:59 PM23:59

Horodatages vers dates

Le convertisseur epoch traduit instantanément les horodatages Unix en dates lisibles et inversement. Le convertisseur détecte automatiquement les formats secondes (10 chiffres) et millisecondes (13 chiffres), vous pouvez donc coller une valeur de n'importe quelle source sans vous soucier de l'unité.

Une vérification de bon sens utile : divisez par 86400 (secondes dans un jour) puis ajoutez 1970 jours pour localiser mentalement n'importe quel horodatage. 1712502600 / 86400 ~ 19820 jours, soit environ 54 ans après 1970, ce qui place en 2024. Pas précis mais assez pour attraper les erreurs de facteur 1000 d'un coup d'œil.

Exemples de conversion en code

La plupart des développeurs ont éventuellement besoin de convertir des horodatages en code. Les API principales sont courtes :

Un outil de conversion est plus rapide que n'importe lequel de ces one-liners quand vous n'avez qu'une seule valeur à traduire, ce qui est le cas la plupart du temps en débogage.

Pourquoi ISO 8601 gagne pour le stockage

ISO 8601 (et le profil RFC 3339) se trie correctement en tant que simple chaîne. 2024-04-07T14:30:00Z vient alphabétiquement avant 2024-04-07T15:00:00Z, qui vient avant 2024-04-08T00:00:00Z. Cette propriété vous permet de trier des horodatages sans les parser, de grouper des lignes de log avec sort | uniq -c, et de raisonner sur des plages avec de simples comparaisons de chaînes.

C'est aussi sans ambiguïté d'une manière que les formats régionaux ne sont pas. 04/07/2024 pourrait être le 7 avril (USA) ou le 4 juillet (la plupart de l'Europe) ; 2024-04-07 est le même dans toutes les locales. Pour l'échange machine à machine, ce manque d'ambiguïté vaut plus que toute autre considération de formatage.

Pièges courants à éviter

Outils et bibliothèques alternatives

Un convertisseur gère le cas ponctuel ; pour le code de production vous allez chercher une bibliothèque.

Outil / bibliothèqueLangageForceÀ surveiller
Convertisseur webNavigateurInstantané, sans installation, gère les ambiguïtés courantesUne valeur à la fois
dateutilPythonParser tolérant, conscient des fuseauxPlus lent que datetime pour le travail en masse
arrowPythonAPI conviviale, défauts ISODépendance supplémentaire pour petits projets
date-fnsJavaScriptTree-shakable, immuableChaque fonction est son propre import
dayjsJavaScriptPetit, API compatible momentModèle de plugin pour les extras
luxonJavaScriptFuseaux IANA de première classeBundle plus gros
chronoRustTypes riches, RFC 3339 natifRythme de maintenance variable
Joda-Time / java.timeJavaLe design de référence qui a influencé les autresÉvitez les vieux Date et Calendar
NodaTimeC#/.NETInstants, durées, calendriers proprement séparésLa migration depuis DateTime n'est pas triviale
GNU dateShell LinuxParsing flexible avec -dBSD/macOS utilise des drapeaux incompatibles

La bonne bibliothèque dépend de votre stack ; la bonne discipline est la même partout : stocker UTC, transmettre ISO 8601, formater uniquement pour l'affichage, et ne jamais faire confiance à un horodatage sans fuseau explicite.

Vie privée et le convertisseur

Le convertisseur de format de temps tourne entièrement dans votre navigateur. Les horodatages que vous collez et les dates que vous générez ne quittent jamais la page. Il n'y a aucun journal serveur des valeurs converties, aucune analytique sur les formats populaires, et aucun moyen pour quiconque de lier une requête à votre IP. Les conversions de temps ne sont pas des données personnelles en elles-mêmes, mais les horodatages dans vos logs (heures de connexion, heures de transaction, fenêtres de planification) le sont souvent, et les passer par un convertisseur tiers pourrait divulguer des détails opérationnels. Faire le travail côté client garde cette information sur votre machine où elle appartient. Pour une tâche aussi routinière que basculer entre secondes et ISO 8601, le réglage de vie privée par défaut devrait être aucune transmission, aucune journalisation, aucun tiers dans la boucle.

Questions fréquentes

Qu'est-ce que le format ISO 8601 ?

ISO 8601 est le standard international pour représenter dates et heures. Il ressemble à 2026-04-07T14:30:00Z, où T sépare la date et l'heure, et Z indique l'UTC. Il est sans ambiguïté quelle que soit la locale.

Pourquoi les API utilisent-elles des horodatages Unix plutôt que des dates lisibles ?

Les horodatages Unix sont un seul nombre, facile à stocker, trier et comparer. Ils sont neutres vis-à-vis du fuseau horaire (toujours UTC) et prennent moins de place qu'une chaîne de date formatée. Le compromis : ils ne sont pas lisibles pour un humain.

Que signifie le Z en fin d'horodatage ?

Le Z signifie « Zulu time », un autre nom pour l'UTC (Coordinated Universal Time). Un horodatage finissant par Z est en UTC, pas en heure locale.

Comment convertir une heure 24 h en 12 h ?

Pour les heures 1-12, l'heure reste la même (ajoutez AM pour 0-11, PM pour 12). Pour 13-23, soustrayez 12 et ajoutez PM. 00:00 devient 12:00 AM (minuit). 12:00 devient 12:00 PM (midi).

What is the Year 2038 problem?

32-bit signed Unix timestamps overflow on 19 January 2038 at 03:14:07 UTC, after which they wrap around to negative values that look like dates in 1901. Most modern systems use 64-bit timestamps and are unaffected, but legacy embedded devices, old databases, and 32-bit time_t in some C code still need to be audited.

How are leap seconds handled in Unix time?

Unix time pretends leap seconds do not exist. The clock simply repeats or stretches the affected second, so a Unix timestamp is not a strict count of elapsed SI seconds. For most applications this is fine, but precision-timing code (astronomy, GPS, high-frequency trading) needs TAI or UTC with explicit leap-second handling.