Les formats de timestamp Unix expliqués
Une référence complète de tous les formats de timestamp Unix — secondes, millisecondes, microsecondes, ISO 8601 et RFC 2822 — avec des exemples montrant quel format chaque langage et base de données utilise.
Unix time en secondes — le format universel
Le format le plus courant : un entier 32 ou 64 bits comptant les secondes entières depuis le 1er janvier 1970 00:00:00 UTC. Actuellement un nombre à 10 chiffres autour de 1,7 milliard.
- Exemple : 1700000000 = 2023-11-15 06:13:20 UTC
- Utilisé par : Python time.time(), PHP time(), Go time.Now().Unix(), Ruby Time.now.to_i, C time(NULL)
- Stocké comme : int 32 bits (hérité, année max 2038), int 64 bits (moderne, sûr pour des milliards d'années)
- Base de données : MySQL UNIX_TIMESTAMP(), PostgreSQL EXTRACT(EPOCH FROM NOW())::BIGINT
Unix time en millisecondes — le format de JavaScript
Millisecondes depuis l'epoch Unix : un entier à 13 chiffres offrant une précision à la milliseconde. C'est le format que l'objet Date de JavaScript utilise en interne.
- Exemple : 1700000000000 = 2023-11-15 06:13:20.000 UTC
- Utilisé par : JavaScript Date.now(), Java System.currentTimeMillis(), .NET DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
- Pour convertir en secondes : Math.floor(ms / 1000)
- Pour convertir depuis les secondes : seconds * 1000
ISO 8601 — le standard lisible par l'humain
ISO 8601 est une norme internationale pour représenter dates et heures sous forme de chaînes. Contrairement aux timestamps Unix, elle est auto-descriptive : le format encode la date/heure et le décalage de fuseau.
- 2023-11-15T06:13:20Z — UTC (le suffixe Z signifie UTC)
- 2023-11-15T01:13:20-05:00 — avec décalage UTC explicite (EST)
- 2023-11-15T06:13:20.000Z — avec millisecondes
- JavaScript : date.toISOString() renvoie toujours l'UTC avec le suffixe Z
- Python : datetime.isoformat(), Go : time.Format(time.RFC3339)
RFC 2822 — format de date e-mail et HTTP
RFC 2822 (aussi appelé RFC 1123 pour HTTP) est le format de date utilisé dans les en-têtes d'e-mail et les réponses HTTP. Date.toUTCString() de JavaScript renvoie ce format.
- Exemple : Wed, 15 Nov 2023 06:13:20 GMT
- Utilisé dans : en-têtes de réponse HTTP (Last-Modified, Date, Expires), en-têtes d'e-mail (Date:)
- JavaScript : date.toUTCString()
- Moins courant dans les API modernes, mais encore très présent dans l'infrastructure web
Comment détecter le format du timestamp
Quand vous recevez une valeur de timestamp inconnue, utilisez ces règles pour identifier son format :
- 10 chiffres, commence par 1 → secondes Unix (ex. 1700000000)
- 13 chiffres, commence par 1 → millisecondes Unix (ex. 1700000000000)
- Négatif → secondes ou millisecondes Unix avant 1970
- Contient T ou Z → ISO 8601 (ex. 2023-11-15T06:13:20Z)
- Contient une virgule ou un nom de jour → RFC 2822 (ex. Wed, 15 Nov 2023 ...)
- 16 chiffres → microsecondes (diviser par 1,000,000 pour des secondes)
- 19 chiffres → nanosecondes (diviser par 1,000,000,000 pour des secondes)
Microsecondes et nanosecondes
Certains systèmes de haute précision utilisent des unités plus petites que la milliseconde. Elles sont rares dans le code applicatif mais apparaissent dans les systèmes bas niveau, les internes de bases de données et les outils d'observabilité.
- Microsecondes (µs) : entier à 16 chiffres — Rust SystemTime as_micros(), PostgreSQL clock_gettime()
- Nanosecondes (ns) : entier à 19 chiffres — Go time.Now().UnixNano(), Rust SystemTime as_nanos()
- PostgreSQL EXTRACT(EPOCH) renvoie un nombre à virgule flottante avec les microsecondes en partie fractionnaire
- Pour convertir des nanosecondes en secondes : diviser par 1,000,000,000 (1e9)
FAQ sur les formats de timestamp Unix
- Combien de chiffres compte un timestamp Unix ?
- Un timestamp Unix moderne en secondes a 10 chiffres (autour de 1,7 milliard) ; en millisecondes, 13. Les microsecondes ont 16 chiffres et les nanosecondes 19.
- Quelle est la différence entre Unix time et ISO 8601 ?
- Unix time est un seul nombre de secondes ou millisecondes depuis 1970 UTC, sans fuseau. ISO 8601 est une chaîne auto-descriptive comme 2023-11-15T06:13:20Z qui encode date, heure et décalage.
- Comment savoir si un timestamp est en secondes ou en millisecondes ?
- Comptez les chiffres : 10 = secondes, 13 = millisecondes. Si une valeur donne une date proche de 1970 ou très lointaine, l'unité a été mal interprétée.