- #développement
- #temps Unix
- #outils
Timestamp Unix : secondes, millisecondes et bug de 2038
Par Vishnu Gopy · · 4 min de lecture
Vous avez sous les yeux un nombre comme 1700000000 dans un log, une base de données ou une réponse d’API. Est-ce une date ? En secondes ou en millisecondes ? Dans quel fuseau ? Se tromper d’unité donne une date en janvier 1970 ou à plusieurs dizaines de milliers d’années dans le futur. Voici comment fonctionne le temps Unix, comment distinguer les deux unités d’un coup d’œil et pourquoi on parle encore du bug de l’an 2038.
Ce qu’est un timestamp Unix#
Un timestamp Unix est le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC, moment appelé l’« epoch ». Les secondes intercalaires ne sont pas comptées : chaque jour vaut exactement 86 400 secondes. Quelques repères :
0 → 1970-01-01T00:00:00Z
86400 → 1970-01-02T00:00:00Z
1000000000 → 2001-09-09T01:46:40Z
1700000000 → 2023-11-14T22:13:20Z
Les valeurs négatives désignent des dates antérieures à 1970. L’intérêt de ce format : un seul nombre, facile à comparer, à trier et à stocker, sans ambiguïté de langue ni de format de date.
Secondes ou millisecondes : 10 ou 13 chiffres#
Les langages ne s’accordent pas. Date.now() en JavaScript et System.currentTimeMillis() en Java renvoient des millisecondes ; la commande date +%s et la fonction time() de PHP renvoient des secondes. Aujourd’hui, un timestamp en secondes compte 10 chiffres (il commence par 17 en 2026) et un timestamp en millisecondes en compte 13.
Pour passer de l’un à l’autre, on multiplie ou on divise par 1 000. Lire une valeur en mauvaise unité se remarque tout de suite :
1700000000lu comme des millisecondes donne le 20 janvier 1970.1700000000000lu comme des secondes donne l’année 55 840.
Un réflexe : comptez les chiffres avant de convertir.
Un timestamp n’a pas de fuseau horaire#
Un timestamp désigne un instant précis, identique partout sur Terre. Seul son affichage change : 1700000000 est le 14 novembre 2023 à 22:13:20 en UTC, et le même jour à 23:13:20 à Paris (UTC+1).
Le fuseau compte à l’aller, quand on convertit une date en timestamp. « 14 novembre 2023, 23:13:20 » désigne deux instants différents à Paris et à New York : il faut donc préciser le fuseau. Les changements d’heure ajoutent deux cas particuliers. Une heure sautée au passage à l’heure d’été n’existe pas. Une heure répétée au retour à l’heure d’hiver existe deux fois, et il faut choisir laquelle.
Le bug de l’an 2038#
Beaucoup de systèmes anciens stockent le timestamp dans un entier signé de 32 bits, dont la valeur maximale est 2 147 483 647. Cette valeur correspond au 19 janvier 2038 à 03:14:07 UTC. Une seconde plus tard, le compteur déborde et repasse à −2 147 483 648, c’est-à-dire au 13 décembre 1901.
Les systèmes 64 bits actuels ne sont pas concernés, leur compteur tient pendant des centaines de milliards d’années. Le risque se trouve plutôt dans les systèmes embarqués anciens, les formats de fichiers figés et certaines colonnes de bases de données : le type TIMESTAMP de MySQL, par exemple, s’arrête à cette même date. Si vous stockez des dates futures (échéances, abonnements), vérifiez le type de vos colonnes avant d’avoir un problème.
Convertir un timestamp dans le navigateur#
Le convertisseur de timestamp fait les deux conversions. Pour lire un timestamp :
- Collez la valeur dans « Timestamp Unix ».
- Laissez l’unité sur « Détection auto », ou choisissez « Secondes » ou « Millisecondes ».
- Choisissez le « Fuseau horaire d’affichage ».
- Lisez le résultat : date ISO 8601 en UTC, date en français, chaîne UTC (RFC 2822) et temps relatif comme « il y a 3 jours ».
La détection automatique lit en secondes tout ce qui est inférieur à 100 milliards et en millisecondes le reste. Pour une date antérieure à mars 1973 exprimée en millisecondes, forcez donc l’unité. Dans l’autre sens, la section « Date vers timestamp » prend une date, une heure et un fuseau, puis affiche les secondes, les millisecondes et la date ISO ; elle signale les heures sautées ou ambiguës. Le calcul se fait dans votre navigateur.
Pour comparer des heures entre plusieurs villes, le convertisseur de fuseaux horaires est plus direct. Pour mesurer un écart entre deux dates, le calculateur de dates convient mieux.
Bonnes habitudes à adopter#
- Stockez des instants en UTC (timestamp ou ISO 8601 avec
Z), convertissez au dernier moment pour l’affichage. - Notez l’unité dans le nom du champ :
created_at_msévite bien des erreurs. - Ne stockez jamais une heure locale sans son fuseau.
- Préférez des entiers 64 bits pour les dates futures.
Outils utilisés dans cet article
- Calculateur de dates
Écart entre deux dates, ajout d’une durée, âge exact et jours fériés français.
- Convertisseur de timestamp
Convertissez un timestamp Unix en date, et une date en timestamp.
- Convertisseur de fuseaux horaires
Convertissez une heure vers plusieurs fuseaux horaires, avec le décalage UTC.
À lire aussi
- Calculer l’écart entre deux dates sans se tromper
Comment calculer l’écart entre deux dates en jours, semaines, mois ou jours ouvrés, compter ou non le dernier jour et éviter les pièges du calendrier.
- Lire une expression cron : champs, symboles et pièges
Les cinq champs d’une expression cron, les symboles *, virgule, tiret et /, des exemples courants et les pièges : fuseau du serveur, jour du mois ou de semaine.
- Convertir les fuseaux horaires pour planifier une réunion
Planifier une réunion entre Paris, New York et Tokyo : repère UTC, changements d’heure décalés, créneaux réalistes et conseils pour une invitation claire.