Développeur5 min de lecture
Timestamp Unix vs ISO 8601 : que choisir ?
Timestamp Unix pour la performance et le calcul, ISO 8601 pour la lisibilité et le contexte fuseau. Voici la matrice de décision selon votre contexte.
Tout système qui manipule des dates affronte ce choix : timestamp Unix (entier) ou ISO 8601 (chaîne). Les deux formats sont valides, mais chacun a un terrain de jeu optimal.
Tableau comparatif
| Critère | Timestamp Unix | ISO 8601 |
|---|---|---|
| Type | Entier (10/13 chiffres) | Chaîne (20-30 caractères) |
| Taille | 4 ou 8 octets | 20-30 octets |
| Lisible par humain | Non (1779798600) | Oui (2026-05-19T14:30:00Z) |
| Fuseau intégré | Non (toujours UTC implicite) | Oui (suffixe Z ou ±HH:MM) |
| Comparaison | Numérique directe | Lexicographique (fonctionne car format ordonné) |
| Calcul de delta | Soustraction directe | Parsing + soustraction |
| Tri DB | Index numérique rapide | Index chaîne (légèrement plus lent) |
| Validation | Toujours valide | Risque de mauvais format |
| Bug 2038 | Oui en 32 bits | Non |
Quand utiliser Unix time
- Cache : TTL exprimé en secondes/ms.
- Logs haute volumétrie : compacité critique.
- Communications binaires : protocoles MQTT, ProtoBuf, Avro.
- Calculs de durée : diff =
now - then, aucune complexité. - Tokens JWT (champs
iat,exp).
Quand utiliser ISO 8601
- API REST publiques : lisibilité pour les développeurs tiers.
- Logs lisibles : analyse à l'œil possible.
- Documents échangés : factures, rapports, exports CSV.
- Champs qui doivent porter un fuseau (planification d'événements).
- Bases de données : type
TIMESTAMPTZen PostgreSQL accepte ISO 8601 et stocke en UTC.
Convertir Unix time ↔ ISO 8601
Conversion bidirectionnelle
// JavaScript
const iso = new Date(1779798600 * 1000).toISOString();
// → "2026-05-19T14:30:00.000Z"
const ts = Math.floor(new Date("2026-05-19T14:30:00Z").getTime() / 1000);
// → 1779798600
// Python
from datetime import datetime, timezone
datetime.fromtimestamp(1779798600, tz=timezone.utc).isoformat()
# → "2026-05-19T14:30:00+00:00"
datetime.fromisoformat("2026-05-19T14:30:00+00:00").timestamp()
# → 1779798600.0
Erreurs classiques
- Confondre secondes et millisecondes :
new Date(1779798600)en JavaScript donne 1970 (ms attendues). Multipliez par 1000. - Stocker un Unix time sans préciser l'unité : un entier seul peut être seconde, ms ou µs.
- Stocker ISO 8601 en heure locale sans suffixe :
2026-05-19T14:30:00est ambigu.