Gelegentlich brauche ich einen Unix Timestamp als "normales" Datum.
Date kann ja ein Datum auch als Timestamp anzeigen (mit der Option +%s). Die umgekehrte Richtung, also einen Timestamp in den Datumstring umwandeln, geht mit date aber nur eingeschränkt (nur UTC). Brauche ich einen Timestamp als Datum, verwende ich (g)awk.
echo 1186888000 | gawk '{print strftime("%c",$1)}'
Ergebnis: So 12 Aug 2007 05:06:40 CEST
echo 1186888000 | gawk '{print strftime("%A, %d %B %Y %H:%M Uhr",$1)}'
Ergebnis: Sonntag, 12 August 2007 05:06 Uhr
Mehr Varianten zur Datumsformatierung mit strftime() liefert, na klar,
man strftime (die C-Funktion).
UPDATE: doch, doch
date kann's auch abseits von UTC:
date -d @1234567890
Ergebnis: Sa 14. Feb 00:31:30 CET 2009
Und das ist korrekt incl. Zeitzone!
Der Trick liegt im Voranstellen von
@, der andere mögliche Aufruf mit Sekunden:
date -d '19700101 1234567890 sec' #falsch!
...gibt nämlich ein falsches Ergebnis, weil UTC mit falschem Zeitzonenkürzel hintendran.
Schade, dass davon rein gar nichts in der manpage von
date steht, ich habe die Methode zufällig in den Kommentaren einer Online-Zeitung gefunden.