Skip to main content

Timestamp vers date

Convertissez un horodatage en date lisible. Prend en charge les secondes, millisecondes et nanosecondes.

En 2038 une horloge 32 bits ne revient pas à 1970 : elle atterrit en 1901

Un horodatage signé sur 32 bits s'épuise à 2 147 483 647 secondes, soit le 19 janvier 2038 à 03:14:07 UTC. La seconde suivante ne repasse pas à zéro. Elle bascule vers la valeur la plus négative que le type peut contenir, plaçant l'horloge au 13 décembre 1901 : un système qui échoue ainsi recule de 137 ans.

Comment ça marche

  • Convertit un horodatage Unix en date lisible et inversement, en UTC et en heure locale.
  • Détecte si l'entrée est en secondes ou en millisecondes, l'erreur la plus courante.
  • Gère les horodatages négatifs, qui sont valides et représentent des dates antérieures à 1970.
horodatage = secondes écoulées depuis 1970-01-01 00:00:00 UTC

maximum 32 bits signé = 2 147 483 647 → 2038-01-19 03:14:07 UTC
  la seconde suivante bascule à −2 147 483 648 → 1901-12-13 20:45:52 UTC

maximum 64 bits signé ≈ 9,223 × 10¹⁸ secondes — environ 292 milliards d'années

Exemple chiffré

La même valeur à dix chiffres lue de deux façons, plus la limite qui met fin au temps 32 bits.

  1. 1770000000 lu comme des secondes → 2026-02-02
  2. 1770000000 lu comme des millisecondes → 1970-01-21
  3. 10 chiffres signifient des secondes ; 13 chiffres des millisecondes
  4. 2147483647 → 2038-01-19 03:14:07 UTC
  5. une seconde plus tard → 1901-12-13 20:45:52 UTC

C'est l'erreur d'unité qui est dangereuse, parce qu'elle échoue en silence. Lire des millisecondes comme des secondes vous projette en l'an 58 000 et saute aux yeux ; lire des secondes comme des millisecondes vous place en janvier 1970, ce qui ressemble à une date plausible et passe la relecture.

Lire le résultat

  • Une date au 1er janvier 1970 en production signifie presque toujours qu'une valeur nulle ou zéro a atteint le formateur plutôt qu'un vrai horodatage. L'époque est la valeur par défaut d'un entier non initialisé, d'où la fréquence de cette date dans les rapports de bugs.
  • Les horodatages négatifs sont parfaitement valides et représentent des dates antérieures à 1970 : −86 400 correspond au 31 décembre 1969. Les systèmes qui les refusent ne peuvent pas stocker de dates historiques, ce qui est une vraie limite et non une mesure de sécurité.
  • L'horodatage lui-même ne porte aucun fuseau ; c'est un compte absolu de secondes. Le fuseau n'intervient qu'au formatage, d'où le fait qu'une même valeur s'affiche comme deux dates calendaires différentes pour deux utilisateurs, et pourquoi stocker l'heure locale plutôt qu'un horodatage cause tant d'ennuis.
  • Le temps Unix ignore par définition les secondes intercalaires, répétant ou étirant une seconde au lieu de la compter. Ce n'est donc pas un décompte véritable de secondes SI écoulées, ce qui compte pour la mesure précise d'intervalles et presque jamais pour autre chose.

Questions fréquentes

Pourquoi ma date s'affiche-t-elle en 1970 ?
Parce que la valeur arrivée au formateur était zéro ou nulle, et zéro est l'époque. C'est rarement un bug d'affichage : l'horodatage n'a jamais été défini, ou s'est perdu en amont, et le 1er janvier 1970 est l'aspect qu'a un entier non défini une fois rendu.
Comment distinguer les secondes des millisecondes ?
Comptez les chiffres. Les horodatages actuels font 10 chiffres en secondes et 13 en millisecondes. Traiter des secondes comme des millisecondes est l'erreur contre laquelle se prémunir, car elle produit une date de début 1970 qui a l'air vraie plutôt qu'ouvertement absurde.

Guide du temps Unix

Le temps Unix (temps epoch) est un système de stockage des dates et heures sous forme du nombre de secondes ou de millisecondes écoulées depuis minuit le 1er janvier 1970 (UTC). Cette norme est très utilisée en programmation, dans les bases de données et les protocoles réseau pour sa simplicité et la facilité de comparaison des dates. La valeur 0 correspond exactement à cette date, chaque seconde suivante ajoute 1 au compteur.

Différents formats de timestamp

Le format le plus courant est Unix en secondes (ex. 1704067200), utilisé sur les systèmes Linux et PHP. Le deuxième format répandu est Unix en millisecondes (ex. 1704067200000), utilisé en JavaScript et sur la JVM. Le troisième est en nanosecondes (ex. 1704067200000000), employé dans les systèmes exigeant une précision extrême, comme les bases de données ou les systèmes financiers.

Problème de l'an 2038

Le format Unix traditionnel sur les systèmes 32 bits est limité à 2 147 483 647 secondes, ce qui correspond au 19 janvier 2038. Après cette date, la valeur bascule dans le négatif. Les systèmes modernes résolvent cela avec des nombres 64 bits, suffisants pour très longtemps. Les nouvelles applications devraient utiliser les millisecondes ou les nanosecondes pour éviter les problèmes de compatibilité.

Fuseaux horaires

Le timestamp Unix est toujours exprimé en UTC : il ne contient donc aucune information de fuseau horaire. Pour afficher la date localement, le système ajoute le décalage du fuseau. Par exemple, la même valeur de timestamp s'affichera une à deux heures plus tôt en Pologne qu'aux États-Unis (selon l'heure d'été). C'est ce qui rend le timestamp idéal pour stocker et transférer des dates entre fuseaux horaires.