🕐
← Retour aux guides

Qu'est-ce qu'un horodatage Unix ? Le guide complet

· Tags: unix-timestamp, epoch, linux-time, 2038-problem, utc, time-conversion

Qu'est-ce qu'un horodatage Unix ?

Un horodatage Unix (également appelé temps POSIX ou temps Epoch) est un système de suivi du temps qui compte le nombre de secondes écoulées depuis l'epoch Unix — 00:00:00 UTC le 1er janvier 1970 — en excluant les secondes intercalaires.

Contrairement aux dates lisibles par un humain qui varient selon le fuseau horaire (« 19 juillet 2026, 15:30 EST »), un horodatage Unix est un simple entier qui représente le même instant partout sur Terre. Par exemple, l'horodatage 1785292800 correspond à un instant précis, que vous soyez à New York, Londres ou Tokyo.

Les horodatages Unix constituent l'épine dorsale de la gestion du temps en informatique moderne. Les systèmes d'exploitation, les langages de programmation, les bases de données et les systèmes de fichiers reposent tous sur cette représentation entière simple sous le capot.

L'epoch Unix : pourquoi le 1er janvier 1970 ?

Le choix du 1er janvier 1970 comme « epoch » (le point de départ) n'était pas arbitraire. Plusieurs considérations pratiques ont conduit à cette décision :

  • Développement Unix précoce : le système d'exploitation Unix a été développé aux Bell Labs à la fin des années 1960 et au début des années 1970. Au moment où le système de temps a été normalisé au début des années 1970, le 1er janvier 1970 était un point de référence récent et net.
  • Simplicité : le temps sur les premiers systèmes Unix était stocké sous forme d'entier signé 32 bits comptant les secondes. Utiliser une date récente maximisait la plage représentable vers le futur.
  • Précédent : l'epoch a été formalisé dans la première norme POSIX, devenant la référence universelle pour les systèmes dérivés d'Unix.

Les systèmes antérieurs de type Unix avaient utilisé différentes dates d'epoch, mais l'epoch de 1970 a prévalu et est resté la norme pour tous les systèmes conformes à POSIX depuis lors.

Comment fonctionne la valeur de l'horodatage

L'idée centrale est simple :

  • Un horodatage de 0 signifie exactement le 1er janvier 1970 à 00:00:00 UTC
  • Un horodatage de 86400 (60 × 60 × 24) signifie le 2 janvier 1970 à 00:00:00 UTC
  • Un horodatage de -3600 signifie le 31 décembre 1969 à 23:00:00 UTC (les horodatages négatifs représentent des dates antérieures à l'epoch)

La formule est simple :

timestamp = seconds since 1970-01-01 00:00:00 UTC

Horodatages en millisecondes

De nombreux systèmes modernes, en particulier JavaScript et les API web, utilisent les millisecondes au lieu des secondes. Un horodatage en millisecondes est simplement la valeur en secondes multipliée par 1000 :

  • Date.now() de JavaScript renvoie des millisecondes
  • time.time() de Python renvoie des secondes sous forme de flottant avec des millisecondes fractionnaires

Vérifiez toujours quelle résolution un système utilise avant de convertir, car les mélanger peut produire des dates décalées de plusieurs décennies.

Le problème de l'an 2038

Le problème de l'an 2038 (également appelé le « bug du millénaire Unix » ou « Y2K38 ») est un problème de représentation du temps qui affectera les systèmes stockant les horodatages sous forme d'entiers signés 32 bits.

Un entier signé 32 bits peut contenir des valeurs d'environ -2,1 milliards à +2,1 milliards. L'horodatage Unix maximal représentable est 2147483647, ce qui correspond à :

  • le 19 janvier 2038 à 03:14:07 UTC

Une seconde plus tard, la valeur déborderait vers -2147483648, ce qui représente le 13 décembre 1901 — amenant les systèmes à interpréter l'heure actuelle comme une date du début du 20e siècle.

Quels systèmes sont concernés ?

  • Les appareils embarqués et le matériel IoT avec des processeurs 32 bits
  • Les anciens noyaux Linux embarqués
  • Les bases de données héritées utilisant des colonnes de temps en entiers 32 bits
  • Les systèmes de fichiers et les formats binaires qui stockent le temps en entiers 32 bits

La solution

Les systèmes modernes sont en grande majorité passés aux entiers 64 bits pour le stockage du temps. Un entier signé 64 bits peut représenter des temps jusqu'à environ 292 milliards d'années dans le futur — pratiquement infini pour tout usage concret.

  • La plupart des distributions Linux modernes sur matériel 64 bits sont déjà en sécurité
  • Le noyau Linux utilise un time_t 64 bits sur les systèmes 64 bits depuis des années
  • Le noyau 5.6+ a introduit la prise en charge du time_t 64 bits pour les architectures 32 bits
  • Des langages de programmation comme Python, Go et Java utilisent des entiers 64 bits en interne

Si vous maintenez des systèmes embarqués ou des logiciels hérités, vérifier la taille de votre time_t est un exercice utile aujourd'hui.

UTC et la relation avec les horodatages Unix

Les horodatages Unix sont intrinsèquement indépendants du fuseau horaire — ils se réfèrent toujours à l'UTC.

Qu'est-ce que l'UTC ?

Le temps universel coordonné (UTC) est la norme de temps primaire par laquelle le monde règle les horloges et le temps. Il a remplacé le temps moyen de Greenwich (GMT) comme norme internationale et est maintenu par des horloges atomiques.

Pourquoi l'UTC est-il important pour les horodatages Unix ?

  • Les horodatages Unix sont définis en UTC, donc un horodatage représente le même instant à l'échelle mondiale
  • Convertir un horodatage Unix en heure locale relève purement de la couche d'affichage
  • Aucune information de fuseau horaire n'est stockée dans l'horodatage lui-même, ce qui garde le système simple et portable

Cette conception signifie que vous pouvez partager un horodatage Unix avec n'importe qui dans le monde et que les deux parties peuvent le convertir dans leur propre heure locale sans ambiguïté.

Secondes intercalaires : la rare exception

Les horodatages Unix comptent théoriquement les secondes depuis l'epoch, mais ils ignorent les secondes intercalaires. Un jour avec une seconde intercalaire ajoutée compte toujours exactement 86400 secondes en temps Unix. Cela signifie que pendant une seconde intercalaire, l'horodatage Unix n'avance pas et la seconde intercalaire disparaît effectivement du décompte.

Cette simplification garde le système pratique mais signifie que les horodatages Unix divergent légèrement du temps atomique. L'écart est suffisamment faible pour qu'il importe rarement dans les applications quotidiennes.

Plages d'horodatages courantes

| Horodatage | Date lisible par un humain | Signification | |-----------|---------------------|--------------| | 0 | 1970-01-01 00:00:00 UTC | L'epoch Unix | | 86400 | 1970-01-02 00:00:00 UTC | Un jour après l'epoch | | 946684800 | 2000-01-01 00:00:00 UTC | L'an 2000 | | 1234567890 | 2009-02-13 23:31:30 UTC | Un motif mémorable | | 1785292800 | 2026-07-19 00:00:00 UTC | L'epoch d'aujourd'hui | | 2147483647 | 2038-01-19 03:14:07 UTC | Maximum 32 bits |

Résumé

Un horodatage Unix est une manière élégante et portable de représenter le temps comme un simple entier. Sa conception — compter les secondes à partir du 1er janvier 1970 UTC — en fait la norme de temps universelle à travers les systèmes d'exploitation, les bases de données et les langages de programmation. Bien que le problème de 2038 menace les systèmes hérités, la transition en cours vers le temps 64 bits garantit que l'horodatage Unix restera la pierre angulaire de la mesure du temps en informatique pour les générations à venir.

Prêt à travailler avec les horodatages Unix ? Utilisez notre Convertisseur d'horodatage Unix pour convertir instantanément entre horodatages et dates lisibles par un humain.