↑ ↓ auswählen, Enter öffnen, Esc schließen

Unix-Zeitstempel umrechnen

Aktuellen Zeitstempel ablesen, einen Timestamp aus dem Log in ein lesbares Datum verwandeln oder umgekehrt. Mit den passenden Befehlen für die Shell.

Zeitstempel umrechnen

Jetzt, Sekunden

…

Jetzt, Millisekunden

…


Zeitstempel in Datum

Lokal
Freitag, 1. Januar 2027 um 01:00:00 MEZ
UTC
Freitag, 1. Januar 2027 um 00:00:00 UTC
ISO 8601
2027-01-01T00:00:00.000Z
Relativ
…

Datum in Zeitstempel

Sekunden
…
Millisekunden
…
Passende Befehle
date +%s
date -d @1798761600
date -u -d @1798761600 "+%Y-%m-%d %H:%M:%S"
date -d "2027-01-01 01:00:00" +%s
date -r 1798761600          # macOS und BSD
mysql -e "SELECT FROM_UNIXTIME(1798761600), UNIX_TIMESTAMP('2027-01-01 01:00:00');"

Was ist ein Unix-Zeitstempel?

Der Unix-Zeitstempel (Unix time, Epoch) zählt die Sekunden seit dem 1. Januar 1970, 00:00:00 Uhr UTC. Er kennt keine Zeitzonen und keine Sommerzeit, darum eignet er sich gut zum Speichern und Vergleichen von Zeitpunkten. Erst bei der Anzeige wird er in eine lokale Zeit umgerechnet. JavaScript, Java und viele APIs arbeiten mit Millisekunden, also einer 13-stelligen Zahl statt der üblichen 10 Stellen. Der Rechner oben erkennt das automatisch.

Die wichtigsten Shell-Befehle

BefehlErgebnis
date +%saktueller Zeitstempel in Sekunden
date +%s%3Naktueller Zeitstempel in Millisekunden (GNU date)
date -d @1798761600Zeitstempel als lokales Datum
date -u -d @1798761600 +%FT%TZZeitstempel als ISO 8601 in UTC
date -d "2027-01-01 01:00" +%sDatum (lokale Zeit) in Zeitstempel
date -d "3 days ago" +%sZeitstempel von vor drei Tagen, praktisch für Skripte
date -r 1798761600macOS und BSD: Zeitstempel als Datum (dort ohne -d @)

In einer crontab muss das Prozentzeichen maskiert werden: date +\%s. Mehr dazu im Cron-Generator.

Zeitstempel in Logs

Manche Logs schreiben rohe Zeitstempel, etwa Squid, HAProxy-Statistiken, Fail2ban-Datenbanken oder eigene Skripte. Mit GNU awk machst du sie in einem Rutsch lesbar:

awk '{ $1 = strftime("%F %T", $1); print }' access.log

Bei journalctl kannst du direkt mit Zeitstempeln filtern: journalctl --since "@1798761600". Für Kernel-Meldungen mit lesbarer Zeit gibt es dmesg -T, die Angabe ist dort aber nach einem Ruhezustand ungenau.

MySQL und MariaDB: FROM_UNIXTIME und UNIX_TIMESTAMP

SELECT FROM_UNIXTIME(1798761600);                  -- Zeitstempel in Datum
SELECT UNIX_TIMESTAMP('2027-01-01 01:00:00');      -- Datum in Zeitstempel
SELECT * FROM wp_options WHERE option_name LIKE '_transient_timeout_%'
  AND option_value < UNIX_TIMESTAMP();             -- abgelaufene Transients

Beide Funktionen rechnen in der Zeitzone der Datenbanksitzung (SELECT @@session.time_zone;), nicht zwingend in der des Servers oder der Anwendung. WordPress speichert zum Beispiel Ablaufzeiten von Transients als Zeitstempel, Beiträge aber als Datum in lokaler und in UTC-Zeit (post_date und post_date_gmt).

Das Jahr-2038-Problem

Wird der Zeitstempel als vorzeichenbehaftete 32-Bit-Zahl gespeichert, ist am 19. Januar 2038 um 03:14:07 Uhr UTC Schluss (Wert 2147483647). Eine Sekunde später springt die Zahl ins Negative, also ins Jahr 1901. Aktuelle 64-Bit-Systeme sind nicht betroffen, wohl aber:

  • Spalten vom Typ TIMESTAMP in MySQL, deren Wertebereich am 19.01.2038 endet. MariaDB hat den Bereich ab Version 11.5 auf 64-Bit-Systemen bis ins Jahr 2106 erweitert. Für weit in der Zukunft liegende Daten ist DATETIME der sichere Typ.
  • Spalten vom Typ INT statt BIGINT für Zeitstempel.
  • alte 32-Bit-Systeme, Embedded-Geräte und ältere PHP-Versionen auf 32-Bit.

Ablaufdaten von Lizenzen, Zertifikaten oder Abos mit langer Laufzeit können die Grenze schon heute überschreiten. Teste solche Felder mit einem Datum nach 2038.

Als Lesezeichen speichern: Mit Strg + D (Mac: ⌘ + D) ist der Zeitstempel-Rechner beim nächsten Blick ins Log griffbereit.

Erst lesen, dann ausführen.

Die Befehle auf myline.de greifen direkt in Server, Dateien und Datenbanken ein. Ein falscher Pfad oder Platzhalter kann Daten unwiderruflich löschen oder einen Server unerreichbar machen.

  • Alle Befehle werden ohne Gewähr bereitgestellt und sind nicht auf jedem System getestet.
  • Vor dem Ausführen verstehen, was ein Befehl tut, und jeden Platzhalter prüfen.
  • Vorher ein Backup anlegen und möglichst zuerst auf einem Testsystem ausprobieren.
  • Die Ausführung erfolgt auf eigene Verantwortung. Eine Haftung für Schäden ist ausgeschlossen, soweit gesetzlich zulässig.