Datumsberechnungen in der Shell

Ich hatte mir mal einen Link gesichert den ich mir ansehen wollte sobald ich wieder auf die Idee käme, mit Daten rechnen zu wollen. Wenn man sich da ansieht was man alles bedenken muss verwirft man schnell alle Ideen die in die Richtung gehen. Das sollen besser andere machen… :-)

Heute war es wieder so weit. OK, kein kompletter Kalender. Aber ich war einsam und alleine in einer Korn-Shell auf Solaris unterwegs und wollte wissen welches Datum wir Gestern hatten. Heute ist einfach, aber Gestern? Mit GNU date sagt man einfach was man will:

date --date yesterday

Unter Solaris ist man von den GNU-Segnungen verschont, da erfordert das einen kleinen Kunstgriff (den ich dann auch im Netz finden konnte):

TZ=GMT+24 date

Man verstellt also einfach (nur für das eine Kommando, nicht für das ganze System!) die Zeitzone um 24 Stunden und fragt dann nach dem Datum. Das funktioniert auch mit mehr als 24 Stunden, und mit negativen Werten für Daten in der Zukunft. Gut zu wissen.

In dem Zusammenhang zitiere ich dann auch nochmal einen Absatz den ich mir vor knapp vier Jahren von blog.detux.de kopiert hatte, es geht um die Unixzeit (auch Unix-Epoche genannt). Den Blog dazu gibt es leider nicht mehr, die Notiz hat sich aber schon mehrfach bewährt:

BASH: Unix-Timestamp in Datum konvertieren
Gerade 10 Minuten nach gesucht, deshalb hier nochmal schnell als Merkzettel:
TIMESTAMP=date +%s DATE=date --date="1970-01-01 $TIMESTAMP sec GMT" echo $DATE
Kann man immer mal wieder gebrauchen…

Etwas konkreter sähe das dann so aus (das Datum ist übrigens der 13. Februar 2009, 23:31:30):

date --date="1970-01-01 1234567890 sec GMT"

Man nutzt hier also den Umstand aus dass Unix die Sekunden seit dem 01.01.1970 zählt und fragt nach wie spät es soundsoviel Sekunden nach eben diesem Datum ist. Logisch. Nicht allzu naheliegend, aber wenn man es weiss: logisch. :-)

1 Kommentar

  1. Ha,

    ich kenn noch eine kürzere Form :-P
    date --date @1234567890

    Damit ist man dann auch immer in der richtigen Zeitzone. Jedenfalls würde ich nicht davon ausgehen, dass der Eingangsbefehl oben auch tatsächlich immer GMT ausgibt. Hoffe, das hilft vllt. weiter. Ist auch schon einfach zu merken, finde ich.

    Gruß
    Ben

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

;-) :-) :-D :-| :-/ :-( :-P more »