Home / LinuxUser / 2005 / 07 / Kalender auf der Kommandozeile

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Eingedost
(161 Punkte bei 4 Stimmen)
Aufteiler
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

Zeitzauber

Kalender auf der Kommandozeile

Sprichwörtlich

Das Programm date bringt für die Ausgabe ein paar nützliche Formatierungsparameter mit. Zusammen mit einem vorangestellten Pluszeichen (+) sorgen verschiedene Prozentzeichen-Buchstaben-Kombinationen fürs richtige Format:

$ date '+Heute ist der %d. Tag im Monat %B des Jahres %Y.'
Heute ist der 07. Tag im Monat Juni des Jahres 2005.

Hier führt %d zu einer zweistelligen Ausgabe des Tages, %B steht für den Monat in Langform und %Y für das Jahr (vierstellig). Eine Übersicht der wichtigsten Format-Platzhalter finden Sie in Tabelle 1.

Der Einsatz dieser Optionen ist immer dann sinnvoll, wenn Sie Teile des aktuellen Datums und der Uhrzeit benötigen. Zusammen mit tar und date erstellen Sie beispielsweise Backups, deren Dateinamen automatisch Tag, Monat und Jahr enthalten:

$ tar cvfj backup_-_$(date +'%d')_$(date +'%m')_$(date +'%y').tar.bz2 *

Tabelle 1: Formatierung der "date"-Ausgabe

%H Stunden (00 bis 23)
%I Stunden (01 bis 12)
%M Minuten (00 bis 59)
%S Sekunden (00 bis 60); der Bereich umfasst 60 und nicht 59 Sekunden wegen der Schaltsekunde.
%p Vor- oder Nachmittag (AM, PM)
%r Zeitangabe, zwölf Stunden (hh:mm:ss AM/PM)
%R Zeitangabe, 24 Stunden (hh:mm:ss), entspricht damit %H:%M
%s Sekunden seit dem 1. Januar 1970 (Unix-Zeit)
%Z Aktuelle Zeitzone (CEST, GMT usw.)
%a Wochentag in Kurzform (Son, Mon usw.)
%A Wochentag in Langform (Sonntag, Montag usw.)
%b Monat in Kurzform (Jan, Feb usw.)
%B Monat in Langform (Januar, Februar usw.)
%d Tag in zweistelliger Zahl (01, 31 usw.)
%e Tag (einstellig mit Leerzeichen, z. B. 7)
%D Das Datum in der Form mm/dd/yy
%j Zeigt, der wie vielte Tag im angegebenen Jahr es ist – für den 1. Januar also 1 und in Nicht-Schaltjahren 365 für den 31. Dezember.
%u Zeigt, der wie vielte Wochentag es ist (1 bis 7).
%U Zeigt die wie vielte Woche im angegebenen Jahr es ist (00 bis 53).
%y Jahr, zweistellig (00 bis 99)
%Y Jahr, vierstellig (z. B. 1973)
%% Druckt das Prozentzeichen selbst.
%n Zeilenende
%t Tabulator

Heute, heute, nur nicht morgen…

Die date-Ausgabe können Sie mit der Option -d weiter spezifizieren. Der Parameter versteht als zusätzliche Angabe eine ganze Reihe englischer Schlüsselwörter und Zahlen. Um beispielsweise das Datum von morgen oder gestern auszugeben, setzen Sie die Begriffe tomorrow und yesterday ein:

$ date -d tomorrow
Di Jun  7 16:45:15 CEST 2005
$ date -d yesterday
So Jun  5 16:46:15 CEST 2005

Weitere Schlüsselwörter sind relative Angaben (next, ago usw.), feste Datumsangaben (09 June 1973, 09 Jun 73 usw.), Wochentage (Monday, Tuesday usw.) und relative Zeitangaben (day, year, week, month, fortnight = 14 Tage usw.), so dass Sie den gestrigen Tag ebenfalls über den Aufruf

date -d '1 day ago'

berechnen können. Setzen Sie wie im Beispiel mehr als ein Schlüsselwort ein, müssen Sie die Datumsangabe in einfache ('') oder normale ("") Hochkommas einschließen. Zusammen mit den Ausgabeformat-Optionen können Sie so beispielsweise den letzten Monat

$ date -d '1 month ago' +'Letzter Monat: %B'
Letzter Monat: Mai

oder den Wochentag des dritten Januars ausgeben:

$ date -d 'third January' +%A
Montag

Termingeplagte mit Deadlines rechnen darüber hinaus mit einem einzigen Befehl auf der Kommandozeile aus, wie viele Tage bis zur Fertigstellung eines Projektes noch bleiben. Dazu greifen Sie auf die arithmetischen Fähigkeiten der Bash zurück; der zu berechnende Ausdruck steht dabei in doppelten runden Klammern, z. B.

$ echo $((1-1))
0

Um die Tage bis zur Deadline zu berechnen, stehen in den Klammern zwei date-Ausdrücke: der Tag der Deadline und davon abgezogen das aktuelle Datum:

$ echo $((`date -d '29 July 2005' +%j`-`date +%j`))
53

Die Formatierung +%j schaltet dabei wieder auf ein "Durchzählen" der Tage eines Jahres um – der 1. Februar ist Tag 32.

Da dieser Aufruf nur funktioniert, wenn beide Tage im selben Jahr liegen, können Sie zu einem kleinen Trick greifen: Dazu ersetzen Sie den Jahrestag (%j) durch die Unix-Zeit (%s) – die zählt die vergangenen Sekunden seit dem 01.01.1970 (0:00 Uhr). Die so berechnete Differenz in Sekunden teilen Sie noch durch 60*60*24 = 86400, um daraus Tage zu erhalten:

$ echo "$((`date -d '09 June 2006' +%s`-`date +%s`)) / 86400" | bc -l
366.45836805555555555555
Tip a friend    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 05/2014

Aktuelle Ausgabe kaufen:

Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Bilder vergleichen mit diffimg
Bilder vergleichen mit diffimg
Tim Schürmann, 01.04.2014 12:40, 1 Kommentare

Das kleine Werkzeug diffimg kann zwei (scheinbar) identische Bilder miteinander vergleichen und die Unterschiede optisch hervorheben. Damit lassen sich nicht nur Rätsel a la „Orignial und Fäls...

Aktuelle Fragen

programm suche
Hans-Joachim Köpke, 13.04.2014 10:43, 8 Antworten
suche noch programme die zu windows gibt, die auch unter linux laufen bzw sich ähneln sozusagen a...
Funknetz (Web-Stick)
Hans-Joachim Köpke, 04.04.2014 07:31, 2 Antworten
Bei Windows7 brauche ich den Stick nur ins USB-Fach schieben dann erkennt Windows7 Automatisch, a...
Ubuntu 13.10 überschreibt immer Windows 8 Bootmanager
Thomas Weiss, 15.03.2014 19:20, 8 Antworten
Hallo Leute, ich hoffe das ich richtig bin. Ich habe einen Dell Insipron 660 Ich möchte gerne Ub...
USB-PTP-Class Kamera wird nicht erkannt (Windows-only)
Wimpy *, 14.03.2014 13:04, 15 Antworten
ich habe meiner Frau eine Digitalkamera, AGFA Optima 103, gekauft und wir sind sehr zufrieden dam...
Treiber
Michael Kristahn, 12.03.2014 08:28, 5 Antworten
Habe mir ein Scanner gebraucht gekauft von Canon CanoScan LiDE 70 kein Treiber wie bekomme ich de...