Convertisseur d’horodatage Unix

Convertissez un horodatage Unix en date lisible dans n’importe quel fuseau horaire, et une date en valeur epoch.

Temps Unix actuel
Détection…
Entrée

Qu’est-ce qu’un horodatage Unix

Un horodatage Unix — aussi appelé temps epoch ou temps POSIX — est un nombre unique qui compte les secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC, un instant appelé epoch Unix. Parce qu’il s’agit d’un seul entier, sans fuseau horaire, sans calendrier et sans mise en forme, c’est le format vers lequel se tournent les ordinateurs dès qu’un instant doit être stocké, trié, comparé ou transmis sur un réseau. C’est ce qui se cache derrière la colonne « created_at » de votre base de données, derrière les claims « iat » et « exp » d’un JWT, derrière le mtime d’un fichier et derrière les horodatages de presque tous les journaux que vous lirez.

La contrepartie, c’est qu’un nombre brut ne dit rien à un être humain. 1716197600 est un instant parfaitement valide, mais vous ne pouvez pas dire d’un coup d’œil s’il s’agit de mardi dernier ou d’il y a trois ans. C’est cette traduction, dans les deux sens, que fait cet outil.

Secondes ou millisecondes : l’ambiguïté qui mord

La convention Unix d’origine compte des secondes entières, et c’est ce que renvoient date +%s dans un shell, time() en PHP et time.time() en Python une fois tronqué. JavaScript, Java et bien d’autres comptent en millisecondes : Date.now() renvoie un nombre mille fois plus grand. Les deux s’appellent « horodatage », et les confondre est l’un des bugs de date les plus répandus qui soient.

La panne est silencieuse plutôt que bruyante. Lisez une valeur en millisecondes comme des secondes et votre date atterrit des dizaines de milliers d’années dans le futur ; lisez une valeur en secondes comme des millisecondes et tout s’effondre en janvier 1970. Ni l’un ni l’autre ne lève d’erreur : vous obtenez simplement une date fausse qui a toutes les apparences d’une vraie.

Cet outil devine d’après l’ordre de grandeur du nombre, puis vous dit ce qu’il a deviné, juste à côté du résultat. Les secondes epoch d’aujourd’hui comptent dix chiffres et les millisecondes treize, si bien que la déduction est presque toujours juste — mais « presque » ne suffit pas pour une valeur que vous vous apprêtez à coller dans un rapport de bug, et c’est pourquoi la lecture retenue est toujours visible et toujours à un clic d’être changée.

Fuseaux horaires, UTC et pourquoi « local » est glissant

Un horodatage Unix n’a pas de fuseau horaire. Il identifie un instant, et ce même instant est simultanément 09:33 à Londres, 11:33 à Jérusalem et 18:33 à Tokyo. Le fuseau horaire ne fait pas partie de la valeur : c’est la lentille à travers laquelle vous la regardez.

C’est pourquoi cet outil montre plusieurs lentilles à la fois. UTC est la référence neutre sur laquelle s’accordent tous les serveurs et tous les journaux. Votre heure locale est celle que signale votre propre appareil, affichée avec le nom de son fuseau (par exemple Europe/Berlin) pour que vous sachiez toujours quelle lentille l’a produite : la détection se fait dans votre navigateur, donc un visiteur à Berlin voit l’heure de Berlin et un visiteur à Tokyo celle de Tokyo. La troisième ligne est le fuseau de votre choix dans la base de données IANA complète — c’est celle qu’il vous faut quand vous lisez le journal d’un serveur situé ailleurs.

  • UTC — la référence sur laquelle tous les systèmes s’accordent, et ce qu’il faut stocker et journaliser.
  • Local — le même instant tel que votre appareil le voit, étiqueté avec le fuseau détecté.
  • Un fuseau de votre choix — pour lire les journaux et les traces de machines situées ailleurs.
  • ISO 8601 — le format texte d’échange, p. ex. 2024-05-20T09:33:20.000Z.
  • Relatif — « il y a 3 heures », pour saisir rapidement à quel point c’est récent.

Les décalages sont affichés à côté de chaque heure (+03:00, -04:00) car ils ne sont pas fixes : la plupart des fuseaux se décalent d’une heure pour l’heure d’été, si bien qu’un même fuseau peut produire des décalages différents selon la période de l’année. Une date proche d’un changement d’heure est précisément là où le calcul à la main déraille.

Travailler avec le temps epoch en pratique

Chaque langage et chaque shell a sa façon de produire et de lire des valeurs epoch. Voici celles qui méritent d’être retenues :

date +%s                         # shell : heure actuelle en secondes
date -d @1716197600              # shell (GNU) : des secondes vers une date
Date.now()                       # JavaScript : heure actuelle en MILLIsecondes
new Date(1716197600 * 1000)      # JavaScript : des secondes vers un Date
time.time()                      # Python : secondes, en flottant
datetime.fromtimestamp(1716197600, tz=timezone.utc)
SELECT EXTRACT(EPOCH FROM now()) -- PostgreSQL : secondes

Une règle empirique qui évite l’essentiel des douleurs liées aux dates : stockez et transmettez les instants en UTC — soit un entier epoch, soit une chaîne ISO 8601 — et ne convertissez vers un fuseau local qu’au tout dernier moment, quand vous les affichez réellement à quelqu’un. Formater trop tôt, c’est ainsi qu’un bug de fuseau horaire finit cuit dans vos données au lieu de rester dans la couche d’affichage.

Autre chose à savoir : un compteur de secondes signé sur 32 bits arrive à saturation le 19 janvier 2038, le « problème de l’an 2038 ». Les systèmes modernes utilisent des valeurs 64 bits et ne risquent rien, mais les vieux équipements embarqués et les anciennes colonnes de bases de données sont justement là où vous pouvez encore le rencontrer.

Questions fréquentes

Comment sait-il si mon nombre est en secondes ou en millisecondes ?
D’après son ordre de grandeur : les valeurs inférieures à environ 1e11 sont lues comme des secondes, les plus grandes comme des millisecondes. Aujourd’hui, cela sépare proprement les secondes à dix chiffres des millisecondes à treize. La lecture retenue est affichée à côté du résultat et vous pouvez la changer d’un clic : la déduction ne vous est jamais cachée.
Quel fuseau horaire compte comme « local » ?
Celui que signale votre propre appareil, détecté dans votre navigateur et affiché par son nom pour lever tout doute. C’est votre fuseau, pas celui du site : un visiteur à Berlin voit l’heure de Berlin et un visiteur à Tokyo celle de Tokyo.
Puis-je reconvertir une date en horodatage ?
Oui. Le même champ accepte les deux sens : saisissez un nombre et vous obtenez une date ; saisissez une date comme 2024-05-20 ou 2024-05-20T09:33:20Z et vous obtenez la valeur epoch. Il n’y a aucun mode à changer.
Gère-t-il les dates antérieures à 1970 ?
Oui. Les horodatages antérieurs à l’epoch sont simplement négatifs — -86400 correspond au 31 décembre 1969 — et les valeurs négatives sont acceptées et converties normalement.
Pourquoi mon horodatage affiche-t-il une date différente de celle attendue ?
Presque toujours pour l’une de ces deux raisons : la lecture secondes/millisecondes n’est pas celle que vous supposiez (regardez l’étiquette et changez-la), ou vous comparez une valeur UTC à une attente en heure locale. L’outil affiche les deux lignes côte à côte pour que vous voyiez laquelle des deux est en cause.
Qu’est-ce que le problème de l’an 2038 ?
Les systèmes qui stockent les secondes epoch dans un entier signé sur 32 bits débordent le 19 janvier 2038 et basculent vers un nombre négatif, donnant des dates en 1901. Tout ce qui utilise des valeurs 64 bits — c’est-à-dire presque tout ce qui est moderne — n’est pas concerné, mais les systèmes embarqués hérités et les anciennes colonnes de bases de données peuvent encore être exposés.
L’horodatage que je saisis est-il envoyé quelque part ?
Non. L’analyse, la conversion et la mise en forme s’exécutent entièrement dans votre navigateur, en s’appuyant sur la prise en charge des dates et des fuseaux horaires de la plateforme elle-même. Rien de ce que vous saisissez ne quitte votre appareil.