Convertir un timestamp Unix

Collez un timestamp Unix et lisez l’instant qu’il désigne — en UTC, dans votre propre fuseau avec le décalage indiqué, sous forme de chaîne ISO 8601, et en toutes lettres du type « il y a huit mois ». Le fait que le nombre soit en secondes ou en millisecondes est déduit de sa taille, et la réponse précise ce qu’elle a retenu.

La déduction est presque toujours juste, et la réponse indique celle qui a servi.

Résultat

La réponse apparaît ici pendant que vous écrivez.

  • Où cela s’exécute

    Rien n’est envoyé, puisqu’il n’y a pas de fichier : tout est calculé dans cette page.

  • Sans file d’attente et sans compte

    Il répond aussi vite que votre machine le permet, et ne demande jamais qui vous êtes.

  • Autant de fois que vous voulez

    Rien n’est compté ni plafonné : répondre à nouveau ne nous coûte rien.

Comment cela fonctionne

  1. Collez le nombre dans le champ. La conversion se fait au fil de la frappe.
  2. Vérifiez l’unité retenue. Forcez-la si vous savez mieux.
  3. Lisez l’instant en UTC, dans votre fuseau, et sous forme de chaîne ISO.

Secondes ou millisecondes est la seule vraie question

Un timestamp Unix est un compte de secondes depuis le 1er janvier 1970 UTC. JavaScript, Java et la plupart des chaînes de journalisation comptent en millisecondes. Les mêmes chiffres désignent donc deux instants qui peuvent être séparés par des décennies, et rien dans le nombre lui-même ne dit quelle convention l’a produit.

La taille tranche en pratique. Une valeur à dix chiffres est en secondes jusqu’en 2286 ; une valeur à treize chiffres est en millisecondes depuis 1973. Cette page choisit sur cette base puis vous dit ce qu’elle a choisi, ce que la plupart des convertisseurs omettent — celui qui devine en silence et se trompe affiche une date de janvier 1970 sans aucune explication.

Le fuseau dans lequel la réponse est donnée

L’UTC est le timestamp lui-même : une valeur epoch ne porte aucun fuseau, la lecture en UTC est donc un fait et non un choix. La ligne locale vient du réglage de votre appareil, et le décalage est imprimé à côté pour qu’il ne reste jamais implicite.

Cette distinction pèse plus qu’il n’y paraît quand le nombre vient d’ailleurs. Un timestamp sorti d’un journal de production désigne un instant, et cet instant est le même partout — mais l’heure au mur que votre collègue cite depuis le même journal est dans son fuseau, et comparer les deux à l’œil est l’endroit où une heure disparaît. Comparez la ligne UTC, ou comparez le nombre.

L’heure d’été française, et l’heure qui manque deux fois par an

Paris est à UTC+1 en hiver et UTC+2 en été, et le basculement a lieu le dernier dimanche de mars et le dernier dimanche d’octobre. Un timestamp ne change pas de valeur ce jour-là : ce qui change, c’est la ligne locale que cette page affiche, parce que le décalage appliqué n’est plus le même.

C’est la source d’erreur la plus fréquente sur des journaux français. Deux événements séparés d’une heure au mur peuvent être séparés de deux heures réelles s’ils encadrent le basculement d’octobre, où l’heure de 2 h à 3 h est jouée deux fois. Le timestamp, lui, reste strictement croissant : c’est pour cela qu’il faut trier sur le nombre et n’afficher l’heure locale qu’à la fin.

Pourquoi la chaîne ISO est celle à recopier ailleurs

ISO 8601 avec un `Z` final ne prête pas à confusion : elle nomme l’instant, le fuseau et la précision dans une seule chaîne, et tous les langages la lisent. `2023-11-14T22:13:20.000Z` ne peut pas être pris pour un jour-mois-année ni pour un mois-jour-année, ce que la même date écrite avec des barres obliques peut parfaitement être.

Cette ambiguïté n’est pas théorique et elle mord ici en particulier. `03/04/2024` est le 3 avril en France et le 4 mars aux États-Unis, et un tableur l’interprétera silencieusement selon sa propre locale. Si une date part dans un ticket, un message ou un autre système, la forme ISO est celle qui survit au voyage.

La semaine ISO n’est pas la semaine de l’année

Les semaines ISO 8601 commencent le lundi, et la semaine 1 est celle qui contient le premier jeudi de l’année. Le 1er janvier peut donc appartenir à la semaine 52 ou 53 de l’année *précédente* — le 1er janvier 2021 est en 2020-S53 — et une année peut compter 53 semaines.

L’implémentation évidente, diviser le quantième par sept, s’en écarte une quinzaine de jours chaque année. Cela compte parce que la semaine ISO est ce qu’emploient les outils de reporting, la paie et l’essentiel de l’administration en France : un rapport intitulé « semaine 1 » peut couvrir des jours situés dans deux années différentes et être parfaitement correct.

L’an 2038, et s’il vous concerne

Un entier signé de 32 bits qui compte des secondes déborde le 19 janvier 2038. Les systèmes qui utilisent encore un `time_t` de 32 bits repartiront en 1901 — la même forme de problème que l’an 2000, avec un rayon d’action plus étroit et une correction plus difficile, puisqu’il s’agit de firmware embarqué et de vieux formats de fichiers plutôt que de logiciels de gestion.

Cela ne concerne ni cette page ni rien qui ait été écrit ces dix dernières années dans un langage courant. JavaScript utilise un double, qui tient les millisecondes exactement jusqu’en 275760. Un `time_t` de 64 bits couvre plus longtemps que l’univers n’existe. Si vous regardez un timestamp dans un navigateur, 2038 est le problème de quelqu’un d’autre.

Les timestamps qui semblent faux et ne le sont pas

Une date en 1970 veut presque toujours dire que des millisecondes ont été lues comme des secondes — ou que la valeur était zéro ou vide et que quelque chose l’a convertie en zéro, ce qui est l’epoch lui-même. Une date dans un futur lointain signifie en général l’inverse : des secondes lues comme des millisecondes, ou un timestamp en microsecondes ou en nanosecondes, ce que certaines bases et certains systèmes de traçage émettent.

Les microsecondes font seize chiffres et les nanosecondes dix-neuf. Ni les unes ni les autres ne sont traitées automatiquement ici, parce qu’elles sont assez rares pour que les deviner dégraderait la déduction courante. Divisez par mille ou par un million d’abord, et la valeur retombe dans une plage que cette page lit correctement.

Les secondes intercalaires, et pourquoi elles n’apparaissent pas

Le temps Unix fait comme si chaque journée comptait exactement 86 400 secondes, ce qui est faux : des secondes intercalaires ont été ajoutées à l’UTC une trentaine de fois depuis 1972. Le compteur epoch les ignore en répétant ou en étirant une seconde, selon le système.

La conséquence pratique est qu’un timestamp Unix n’est pas un compte exact de secondes écoulées depuis 1970, mais un compte de jours convertis en secondes. L’écart est de quelques dizaines de secondes au total et n’intéresse que la métrologie et certains protocoles de synchronisation ; pour lire un journal, il est sans effet.

Le temps écoulé, et pourquoi il est arrondi

La ligne « il y a huit mois » est calculée par rapport à l’horloge de votre appareil, et elle est volontairement grossière : au-delà de quelques jours, la précision à la minute n’aide personne et donne une fausse impression d’exactitude. Ce qu’on cherche à savoir, c’est si l’événement date de ce matin, de la semaine dernière ou de l’an dernier.

Cela veut dire que la ligne dépend d’une horloge que cette page ne contrôle pas. Sur une machine dont la date est fausse, l’UTC et la chaîne ISO restent justes tandis que le temps écoulé ne l’est pas — et c’est justement ainsi qu’on découvre qu’une horloge dérive.

Convertir un timestamp Unix : questions fréquentes

Mon timestamp est-il en secondes ou en millisecondes ?

Comptez les chiffres. Dix veut dire des secondes pour toute date entre 2001 et 2286 ; treize veut dire des millisecondes. Cette page décide sur cette base et indique ce qu’elle a retenu, ce qui vous permet de forcer l’unité si le nombre vient d’un endroit inhabituel.

Pourquoi mon timestamp affiche-t-il une date de 1970 ?

Presque toujours parce que des millisecondes ont été lues comme des secondes — une valeur à treize chiffres lue en secondes atterrit très loin dans le futur, et une valeur à dix chiffres lue en millisecondes atterrit deux semaines après l’epoch. L’autre cause est une valeur nulle ou vide, l’epoch étant le 1er janvier 1970.

Dans quel fuseau la ligne locale est-elle donnée ?

Celui de cet appareil, avec le décalage imprimé à côté. Il n’y a pas de serveur ici et pas de fuseau configuré. Si vous comparez avec la lecture d’un collègue sur le même journal, comparez la ligne UTC ou le nombre lui-même : c’est là qu’une heure disparaît d’habitude.

Pourquoi la semaine ISO ne correspond-elle pas à celle que j’attendais ?

Parce que les semaines ISO commencent le lundi et que la semaine 1 est celle qui contient le premier jeudi de l’année. Le 1er janvier 2021 tombe en semaine 53 de 2020, et certaines années comptent 53 semaines. Diviser le quantième par sept donne une autre réponse pendant une quinzaine de jours par an.

Le timestamp que je colle part-il quelque part ?

Non. Le calcul se fait dans cette page et l’onglet réseau ne montrera rien qui sorte. Un timestamp paraît rarement sensible, mais il vient de journaux et de payloads qui le sont souvent, et il n’y a aucune raison qu’il voyage pour être converti.

Autres outils