Les timestamps Unix expliqués
Un timestamp Unix n’est qu’un nombre de secondes, et pourtant il cause un flot régulier de bugs. Ce qu’il compte, comment reconnaître secondes et millisecondes d’un coup d’œil, ce qui se passe avec les fuseaux et les secondes intercalaires, et pourquoi 2038 compte.
Ouvrez presque n’importe quel fichier journal, export de base de données ou réponse d’API et vous trouverez des nombres comme 1791288000 là où devrait figurer une date. Ce nombre est un timestamp Unix, la façon la plus courante pour un ordinateur de stocker un instant. Ce guide explique ce que signifie ce nombre, comment reconnaître son unité d’un coup d’œil, où interviennent les fuseaux horaires et pourquoi l’année 2038 compte.
Ce que signifie le nombre
Un timestamp Unix est le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC, un instant appelé l’époque Unix. Le choix de la date est historique : c’était un chiffre rond pratique quand le système d’exploitation Unix était écrit aux Bell Labs, vers 1970.
Son attrait tient à sa simplicité. Un simple entier est facile à stocker, trier et comparer, deux instants se soustraient pour donner une durée en secondes, et le même nombre désigne le même instant partout dans le monde. Quelques repères aident à se faire une idée de l’échelle :
| Timestamp | Instant (UTC) |
|---|---|
0 | 1er janvier 1970, 00:00:00 |
-1 | 31 décembre 1969, 23:59:59 |
1000000000 | 9 septembre 2001, 01:46:40 |
1234567890 | 13 février 2009, 23:31:30 |
1700000000 | 14 novembre 2023, 22:13:20 |
2000000000 | 18 mai 2033, 03:33:20 |
2147483647 | 19 janvier 2038, 03:14:07 |
Les nombres négatifs sont permis et comptent à rebours : les dates antérieures à 1970 fonctionnent aussi, à condition que le logiciel qui les lit s’y attende.
Secondes, millisecondes ou plus ?
La définition d’origine utilise les secondes, mais de nombreux systèmes comptent des unités plus fines depuis la même époque. Date.now() en JavaScript, System.currentTimeMillis() en Java et la plupart des API web utilisent les millisecondes. Les bases de données et les outils de traçage utilisent parfois les microsecondes ou les nanosecondes.
Pour les dates de notre époque, le nombre de chiffres trahit l’unité :
- 10 chiffres : des secondes (c’est vrai jusqu’en 2286).
- 13 chiffres : des millisecondes.
- 16 chiffres : des microsecondes.
- 19 chiffres : des nanosecondes.
Les confondre est l’un des bogues de date les plus fréquents. Une valeur en secondes lue comme des millisecondes tombe en janvier 1970 ; une valeur en millisecondes lue comme des secondes tombe des dizaines de milliers d’années dans le futur. Si une date de votre application s’affiche en 1970, un facteur 1 000 manquant est la première chose à vérifier. Notre convertisseur de timestamp détecte l’unité d’après le nombre de chiffres, et vous pouvez la forcer.
Fuseaux horaires : le timestamp n’en a pas
Un timestamp désigne un instant, pas une heure lue sur une horloge murale. La valeur 1791288000 est le même instant à Tokyo, Paris et New York ; seule l’heure locale diffère. La convertir en date lisible demande toujours de choisir un fuseau horaire, et c’est à cette étape que se produisent la plupart des erreurs.
L’usage habituel est de stocker et d’échanger les timestamps en UTC et de ne passer à l’heure locale qu’au moment de les montrer à une personne. Quand vous reconvertissez une date locale en timestamp, il faut savoir dans quel fuseau horaire était cette date. « 9 mars 2025, 09:00 » n’est pas le même timestamp à Berlin et à Chicago, et autour des changements d’heure, une heure locale peut même exister deux fois ou pas du tout.
Les secondes intercalaires sont ignorées
La rotation de la Terre est légèrement irrégulière : l’UTC officiel a donc parfois ajouté une seconde intercalaire, 27 entre 1972 et 2016. Le temps Unix fait comme si elles n’existaient pas : chaque jour dure exactement 86 400 secondes. Pendant une seconde intercalaire, l’horloge Unix répète une seconde ou l’étale.
Dans presque tous les cas, c’est un avantage. Le timestamp de n’importe quelle date se calcule avec une arithmétique simple, et soustraire deux timestamps donne l’écart en secondes de calendrier. Seules les applications qui doivent mesurer des intervalles physiques à la seconde près de part et d’autre d’une seconde intercalaire, comme certains systèmes scientifiques, doivent s’en soucier. Les organismes internationaux de mesure du temps ont voté l’abandon des secondes intercalaires d’ici 2035.
Le problème de l’an 2038
De nombreux systèmes anciens stockent le timestamp dans un entier signé de 32 bits. La plus grande valeur qu’il peut contenir est 2 147 483 647, soit le 19 janvier 2038 à 03:14:07 UTC. Une seconde plus tard, le nombre déborde et repasse à la valeur la plus négative, que ces systèmes lisent comme le 13 décembre 1901.
C’est le même genre de problème que le bogue de l’an 2000, et il se corrige de la même façon : en passant à des nombres plus larges. Un timestamp signé de 64 bits tient environ 292 milliards d’années. Les systèmes d’exploitation, bases de données et langages modernes utilisent déjà un temps sur 64 bits, mais les appareils embarqués, les anciens formats de fichiers et certaines bases de données avec des colonnes de timestamp sur 32 bits devront être mis à jour avant 2038. Si vous concevez aujourd’hui un format de fichier ou une colonne de base de données, donnez-lui 64 bits.
Un compte de secondes signé sur 64 bits tient environ 292 milliards d’années, bien au-delà de cette échelle.
Convertir à la main et en code
Dans la plupart des langages, la conversion tient en une ligne. Quelques exemples :
// JavaScript : des secondes vers une Date, et retour
new Date(1791288000 * 1000).toISOString(); // "2026-10-06T12:00:00.000Z"
Math.floor(Date.now() / 1000); // le timestamp actuel en secondes
# Python
from datetime import datetime, timezone
datetime.fromtimestamp(1791288000, tz=timezone.utc)
-- PostgreSQL
SELECT to_timestamp(1791288000);Les tableurs comptent en jours plutôt qu’en secondes, depuis leur propre époque. Dans Excel et Google Sheets, un timestamp Unix dans la cellule A1 devient une date avec =A1/86400+25569 (puis mettez la cellule au format date), car 25 569 est le nombre de jours entre le 1er janvier 1900 et le 1er janvier 1970 dans le calendrier d’Excel.
Pour une vérification ponctuelle, le convertisseur de timestamp affiche le timestamp actuel en direct, transforme n’importe quel timestamp en date dans le fuseau horaire de votre choix (en détectant l’unité pour vous), fait l’inverse à partir d’une date et mesure l’écart entre deux dates. Il fonctionne dans votre navigateur : les valeurs que vous collez restent sur votre appareil.
Questions et réponses
Pourquoi ma date affiche-t-elle le 1er janvier 1970 ?
Le programme a lu une valeur nulle, ou un timestamp en secondes comme des millisecondes. Cherchez un champ vide et une multiplication ou une division par 1 000 oubliée.
Un timestamp Unix est-il en UTC ?
Il compte depuis un instant défini en UTC et désigne le même instant partout : en pratique, oui. Il ne devient une heure locale qu’au moment de le convertir pour l’affichage.
Mon ordinateur va-t-il cesser de fonctionner en 2038 ?
Les systèmes actuels des ordinateurs et des téléphones utilisent un temps sur 64 bits et ne sont pas concernés. Le risque se situe dans les anciens appareils embarqués, les vieux logiciels et les formats de données qui stockent encore des timestamps sur 32 bits.
Comment obtenir le timestamp Unix actuel ?
Dans un terminal sur macOS ou Linux, lancez date +%s. En JavaScript, utilisez Math.floor(Date.now() / 1000). Le convertisseur de timestamp l’affiche aussi en direct.
Les outils de cet article
À lire aussi sur le blog
ZIP, 7z ou RAR : quel format d’archive est le meilleur ?
Nous avons compressé les mêmes dossiers de photos, vidéos, documents et données en ZIP, 7z et RAR, puis mesuré le poids et la vitesse. Le gagnant dépend presque entièrement de ce qu’il y a dedans.
CSV, Excel ou JSON : quel format pour vos données ?
Nous avons enregistré le même tableau de 100 000 lignes en CSV, en classeur Excel et en JSON, puis comparé les poids, la vitesse de lecture dans du code et ce qui se passe mal avec les dates, les zéros initiaux et les longs nombres.
Correction d’erreur et taille des QR codes : L, M, Q et H testés
Une correction d’erreur plus forte permet à un QR code de survivre aux dégâts, mais le rend aussi plus dense. Nous avons généré des codes pour quatre contenus courants à chaque niveau et les avons couverts petit à petit jusqu’à ce qu’ils ne se lisent plus.