Comment cela fonctionne
Le temps Unix compte les secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC, l’epoch Unix, sans tenir compte des secondes intercalaires. C’est le même nombre partout sur Terre au même instant, ce qui explique pourquoi les serveurs, les bases de données et les journaux stockent le temps ainsi et laissent les fuseaux horaires à l’affichage.
De nombreux systèmes comptent dans des unités plus petites : JavaScript et Java en millisecondes, certaines bases de données et certains outils de traçage en microsecondes, Go et les interfaces du noyau Linux souvent en nanosecondes. Le convertisseur les distingue par la longueur : un timestamp en secondes a 10 chiffres pour toute date entre 2001 et 2286, 13 en millisecondes, 16 en microsecondes et 19 en nanosecondes. Choisissez vous-même l’unité pour les dates éloignées d’aujourd’hui.
La date est affichée en UTC, dans le fuseau horaire de votre navigateur et dans un fuseau de votre choix, à partir de la base de fuseaux horaires de votre navigateur : l’heure d’été est donc appliquée telle qu’elle l’était à cette date. ISO 8601 est la forme pour les données et les API ; RFC 2822 est celle des en-têtes d’e-mail.
Exemple
1700000000 correspond au 14 novembre 2023 à 22:13:20 UTC : 2023-11-14T22:13:20Z en ISO 8601 et Tue, 14 Nov 2023 22:13:20 +0000 en RFC 2822. À New York, il était 17:13:20 le même jour, en Inde 03:43:20 le lendemain. Le même instant en millisecondes vaut 1700000000000.
Le temps Unix en code
L’heure epoch actuelle, et la conversion d’un epoch en date, dans les langages les plus courants sur un serveur :
# Bash (GNU date; macOS: date -r 1700000000)
date +%s
date +%s%3N # milliseconds
date -d @1700000000
# Python
import time; int(time.time())
from datetime import datetime, timezone; datetime.fromtimestamp(1700000000, timezone.utc)
// JavaScript
Math.floor(Date.now() / 1000)
new Date(1700000000 * 1000).toISOString()
<?php
time();
date('c', 1700000000);
-- SQL
SELECT UNIX_TIMESTAMP(); -- MySQL, MariaDB
SELECT EXTRACT(EPOCH FROM now())::bigint; -- PostgreSQL
SELECT unixepoch(); -- SQLite 3.38+
SELECT to_timestamp(1700000000); -- PostgreSQL: epoch to dateQuestions
Qu’est-ce que le temps epoch ?
Le temps epoch, aussi appelé temps Unix, est le nombre de secondes écoulées depuis l’epoch Unix : le 1er janvier 1970, 00:00:00 UTC. Les dates antérieures sont négatives. Presque tous les systèmes d’exploitation et langages de programmation comptent le temps à partir de là, et un convertisseur d’epoch comme celui-ci transforme ce nombre en date lisible, et inversement.
Qu’est-ce que le bug de l’an 2038 ?
Les programmes qui gardent le temps Unix dans un entier signé de 32 bits ne peuvent compter que jusqu’à 2 147 483 647, soit le 19 janvier 2038 à 03:14:07 UTC. Une seconde plus tard, le nombre repasse en négatif et se lit comme décembre 1901. Les systèmes 64 bits actuels utilisent un time_t de 64 bits et ne sont pas concernés, mais d’anciens appareils embarqués, des formats de fichiers et des colonnes de bases de données qui stockent des secondes sur 32 bits peuvent l’être.
Mon timestamp est-il en secondes ou en millisecondes ?
Comptez les chiffres. Une date actuelle en secondes a 10 chiffres (1700000000), en millisecondes 13 (1700000000000). Date.now() de JavaScript et System.currentTimeMillis() de Java donnent des millisecondes ; date +%s, time() de PHP et int(time.time()) de Python donnent des secondes. Si une date tombe en 1970 ou des milliers d’années plus tard, l’unité est mauvaise.
Les timestamps Unix ont-ils un fuseau horaire ?
Non. Un timestamp est le même nombre partout dans le monde au même instant ; il compte toujours depuis minuit UTC le 1er janvier 1970. Le fuseau horaire n’intervient que pour le transformer en date de calendrier et en heure d’horloge, ce qui explique que le convertisseur montre le même timestamp dans plusieurs fuseaux.
Le temps Unix compte-t-il les secondes intercalaires ?
Non. Le temps Unix considère chaque jour comme faisant exactement 86 400 secondes : les 27 secondes intercalaires ajoutées à l’UTC depuis 1972 (la dernière fin 2016) ne sont donc pas comptées. Pour les journaux et l’usage courant, cela n’a pas d’importance.