Standards5 min de lecture
Timestamp Unix vs ISO 8601 : comparatif et choix
Le timestamp Unix (1738329600) et la date ISO 8601 (2026-02-01T00:00:00Z) sont deux représentations équivalentes. Voici quand choisir l'une ou l'autre.
Le timestamp Unix compte le nombre de secondes écoulées depuis le 1er janvier 1970 UTC (l'epoch). Le format ISO 8601 écrit la date sous forme lisible. Les deux sont équivalents pour stocker un instant, mais leurs usages diffèrent.
Définitions
- Timestamp Unix — entier représentant les secondes (ou millisecondes) depuis 1970-01-01T00:00:00Z. Exemple :
1738329600= 2026-02-01T00:00:00Z. - ISO 8601 — chaîne textuelle
YYYY-MM-DDTHH:MM:SSZ. Exemple :2026-02-01T00:00:00Z.
Comparatif
| Critère | Timestamp Unix | ISO 8601 |
|---|---|---|
| Taille (32-bit int / texte) | 4-8 octets | 20-25 octets |
| Lisibilité humaine | Faible | Excellente |
| Tri | Numérique (rapide) | Alphabétique (= chronologique) |
| Calcul de durée | Soustraction directe | Nécessite parsing |
| Fuseau encodé | Non (toujours UTC) | Oui (Z ou ±HH:MM) |
| Compatible JSON | Number | String |
| Lisible dans un log | Non | Oui |
Quand utiliser Unix timestamp
- Calculs de durée intensifs (différences en millisecondes).
- Échanges binaires (Protobuf, MessagePack).
- Stockage compact dans une base time-series.
- Tri rapide sur un index numérique.
Quand utiliser ISO 8601
- API REST (JSON) — la lisibilité aide au debug.
- Logs applicatifs et serveur.
- Bases SQL (type
TIMESTAMPTZ). - Tout échange avec un humain dans la boucle.
Le piège du bug de l'an 2038
Un timestamp Unix stocké en int32 signé déborde le 19 janvier 2038 à 03:14:07 UTC. Tout système legacy utilisant un entier 32-bit pour ses timestamps doit migrer vers du 64-bit avant cette date. ISO 8601 ne souffre pas de ce problème.
Convertir entre Unix et ISO 8601
Conversion rapide
// JavaScript
const ts = Math.floor(Date.now() / 1000); // 1738329600
const iso = new Date(ts * 1000).toISOString(); // "2026-02-01T00:00:00.000Z"
// Python
import time
ts = int(time.time())
iso = datetime.fromtimestamp(ts, tz=timezone.utc).isoformat()
// SQL (PostgreSQL)
SELECT to_timestamp(1738329600); -- 2026-02-01 00:00:00+00
SELECT extract(epoch FROM now())::bigint; -- timestamp courant