← retour aux snippets

date ISO 8601 UTC portable

Obtenir des timestamps ISO 8601 en UTC, faire des calculs de temps, compatibles Linux et macOS.

bash utils #date#time#utc#cli

objectif

Générer des timestamps ISO 8601 en UTC et faire des décalages temporels de manière portable (Linux GNU et macOS/BSD).

code minimal

# maintenant en ISO 8601 UTC (Zulu)
date -u +%Y-%m-%dT%H:%M:%SZ

utilisation

# Linux (GNU): plus 15 minutes, moins 2 jours
date -u -d '+15 minutes' +%Y-%m-%dT%H:%M:%SZ
date -u -d '-2 days' +%Y-%m-%dT%H:%M:%SZ

# macOS/BSD: plus 15 minutes, moins 2 jours
date -u -v+15M +%Y-%m-%dT%H:%M:%SZ
date -u -v-2d +%Y-%m-%dT%H:%M:%SZ

# convertir epoch -> ISO 8601 UTC
# Linux:
date -u -d @1690000000 +%Y-%m-%dT%H:%M:%SZ
# macOS/BSD:
date -u -r 1690000000 +%Y-%m-%dT%H:%M:%SZ

# convertir ISO 8601 UTC -> epoch
# Linux:
date -ud '2025-08-15T12:34:56Z' +%s
# macOS/BSD:
date -ujf '%Y-%m-%dT%H:%M:%SZ' '2025-08-15T12:34:56Z' +%s

# debut et fin du jour UTC (00:00:00Z et 23:59:59Z)
# Linux:
date -u -d 'today 00:00:00' +%Y-%m-%dT%H:%M:%SZ
date -u -d 'today 23:59:59' +%Y-%m-%dT%H:%M:%SZ
# macOS/BSD:
d=$(date -u +%Y-%m-%d); printf '%sT00:00:00Z\n' "$d"; printf '%sT23:59:59Z\n' "$d"

# format RFC 3339 (Linux GNU)
date --rfc-3339=seconds | sed 's/ /T/; s/+00:00/Z/'

variante(s) utile(s)

# forcer une zone horaire cible (ex: Europe/Paris) pour affichage local
TZ="Europe/Paris" date +%Y-%m-%dT%H:%M:%S%z

# timestamp lisible pour logs
ts() { date -u +%Y-%m-%dT%H:%M:%SZ; }
echo "$(ts) job started"

# microsecondes en UTC (Linux GNU)
date -u +%Y-%m-%dT%H:%M:%S.%6NZ

# fallback portable via Python (si differences GNU/BSD posent probleme)
python3 - <<'PY'
import datetime, sys
now = datetime.datetime.utcnow().replace(microsecond=0).isoformat() + "Z"
print(now)
PY

# ajouter N heures/minutes portable via Python
h=3; m=30
python3 - "$h" "$m" <<'PY'
import datetime, sys
h, m = map(int, sys.argv[1:3])
t = datetime.datetime.utcnow() + datetime.timedelta(hours=h, minutes=m)
print(t.replace(microsecond=0).isoformat() + "Z")
PY

notes

  • date differe entre Linux (GNU) et macOS/BSD: utilisez -d sur Linux et -v/-r/-j -f sur macOS.
  • ajoutez toujours -u pour travailler en UTC; evite les surprises dues aux changements d’heure.
  • pour convertir ISO -> epoch sur macOS, la combinaison -j -f requiert un format explicite.
  • validez vos formats en amont si un autre outil consomme ces timestamps (API, bases de donnees).