Unix-Zeitstempel in Datum umrechnen

25. Februar 2009

Die Epoche

In Unix und Linux werden Datumsangaben intern immer als die Anzahl der Sekunden seit dem 1. Januar 1970 um 00:00 Greenwhich Mean Time (GTM, heute UTC) dargestellt. Dieses Urdatum wird manchmal auch "The Epoch" genannt. In manchen Situationen muss man in Shellskripten die Unix-Zeit in ein normales Datum umrechnen und umgekehrt.

Datum umrechnen

Die Umrechnung geht in beiden Richtungen mit dem Befehl date. Mit der Option -d gibt man das darzustellende Datum an (sonst gibt date die aktuelle Zeit aus). Eine Epochzeit wird einfach als Zahl mit einem vorangestellen Klammeraffen geschrieben. Im Februar 2009 war z.B. die 1234567890-te Sekunde seit der Epoche:

user@linux> date -d @1234567890
Sa 14. Feb 00:31:30 CET 2009

Umgekehrt kann man ein Datum in einen Unix-Zeitstempel umrechnen, in dem man bei date als Formatangabe ein +%s verwendet. So bekommt man z.B. die aktuelle Zeit:

user@linux> date +%s

Um eine bestimmte Zeit umzurechnen, muss man dieses wieder mit -d angeben. Dabei sind verschiedene Darstellungen erlaubt. Für die Umrechnung des 18.12.2008 um 12:34 geben Sie an:

user@linux> date -d '2008-12-18 12:34:00' +%s
1229600040

Vergessen Sie dabei nicht, dass der Zeitstempel immer in UTC gerechnet - im Gegensatz zum ausgeschriebenen Datum, welches relativ zu Ihrer Zeitzone zu verstehen ist. Deswegen bekommt man in Deutschland auch -3600 Sekunden, wenn man den 1.1.1970 in Sekunden umrechnet:

user@linux> date -d '1970-01-01 00:00:00' +%s
-3600

Warum? Als es in Deutschland der 1.1.1970 um 00:00 war, war es in England noch 23:00 am Vortag.