|
|
Kennst Du das auch ? Um in einem Script die Logfiles vom Vortag
auszuwerten, benötigt man das gestrige Datum. Nur - Wie bekommt man's
?
Zum gestrigen Datum fallen einem doch spontan drei "Algorithmen" ein:
- Ein Tool, das das gestrige Datum direkt ausgibt
- Ein Tool, das z.B. die Sekunden seit Epoch (1.1.1970, 0:00:00 Uhr)
ausgibt, einen Tag (in Sekunden) davon abzieht und diese
Sekunden wieder rückwandelt
- Eine komplette Kalenderberechnung, der Vollständigkeit halber
natürlich unter Berücksichtigung der kompletten Schaltjahresregeln
(und für die Erbsenzähler unter uns natürlich nicht zu vergessen: Der
Sprung vom Julianischen in den Gregorianischen Kalender).
Schaun' mer mal:
- date
- Hmm, GNU-date kennt Ausdrücke wie
~> date --date 'yesterday'
oder auch
~> date --date '1 day ago'
.
Das entspricht dem oben aufgezählten 1. Algorithmus (Tools, die das
direkt beherrschen).
Plattformunabhängig ist das aber nicht.
Dann gibt's da natürlich noch
~> date +%s
Das ist der erste Teil vom 2. Algorithmus (Rechnen mit Sekunden seit
Epoch). Leider kann selbst
GNU-date (geschweige denn das Feld-Wald-und-Wiesen-date der
kommerziellen Unix-Hersteller) nicht Sekunden rückwandeln in ein Datum.
Und nicht vergessen: GNU-date ist nicht plattformunabhängig (kann
aber natürlich auf vermutlich allen relevanten Plattformen
installiert werden)
- awk
- Ja, auch gawk kann mit Sekunden seit Epoch umgehen. Damit ist der
2. Algorithmus implementierbar.
Mir ist kein "normaler" awk bekannt, der das kann. Schade
Plattformunabhängig ist das daher auch nicht.
- Shell + cal
- Nun, wir können immer noch den 3. Algorithmus (komplette
Kalenderberechnung) umsetzen.
Hier nur kurz die Idee: Wir nehmen cal für die eigentliche
Kalenderberechnung (wieviele Tage hat welcher Monat in welchem
Jahr) und machen mit etwas einfacher Arithmetik in der Shell den
Rest.
- perl
- Logisch, perl kann den zweiten Algorithmus (Rechnen mit Sekunden
seit Epoch) problemlos umsetzen.
Dazu verweisen wir auf unsere Seite Datumsberechnungen in Perl. Dort ist auch
ein Modul beschrieben, die unser Problem löst.
- tcl, python, ...
- (Setze hier deine bevorzugte Sprache ein): Ja, die können das
vermutlich alle auch. Aber nicht hier.
War das alles ? Unix wäre nicht Unix, wenn da nicht noch "Guru"-Weg wäre:
Die Umgebungsvariable TZ beschreibt die Zeitzone, in der sich
der Anwender zuhause fühlt (nicht zwangsläufig die Zeitzone, in der
das System läuft!). Steht das System in Frankfurt und hat dementsprechend
TZ=CE(S)T bzw. GMT-1/GMT-2 (je nach Sommerzeit/Winterzeit) gesetzt,
kann der Anwender in Greenwich trotzdem durch Setzen von
~> export TZ=GMT
~> date
sich die Zeit in seiner Zeitzone anzeigen lassen.
Dieses kann man nun nutzen:
~> TZ=GMT+22 date (in der Sommerzeit)
~> TZ=GMT+23 date (in der Winterzeit)
liefert einem das gestrige Datum (ok, die Uhrzeit stimmt nicht, und
das Ganze läuft auch nicht zwischen 00:00 und 01:00 Uhr, aber
immerhin!).
|