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

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

„Klickbunt auf dem Server? Warum nicht, wenn's hilft!"
(179 Punkte bei 5 Stimmen)
Bezahlstandard
(121 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
Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

title_2013_06

Aktuelle Ausgabe kaufen:

Heft bestellen 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

Terminator
Viele Terminals im Griff mit Terminator
Tim Schürmann, 07.05.2013 10:57, 1 Kommentare

Wer morgens nach dem Einschalten des Rechners erst einmal mehrere Terminals öffnet und sich diese mühevoll auf dem Bildschirm drapiert, der sollte einen Blick auf Terminator werfen. Das kleine...

Aktuelle Fragen

Kontakt via QR code hinzufügen
Herman Sproesser, 17.05.2013 17:46, 3 Antworten
Hi hab in der aktuellen ausgabe 06.2013 den artikel über QR Codes gelesen. Ich hab nartürlich...
Dateimanager Dolphin, wo legt er die Datei Kommentare ab?
Uwe Heine, 16.05.2013 15:19, 1 Antworten
Suse Linux 12.1 - KDE 4.7.2 / Dolphin 1.7. Ich habe bei vielen Dateien über Dolphin Kommentare...
wie baut man Kernel Module so, dass sie mit jedem Kernel laden?
GoaSkin , 22.04.2013 10:22, 1 Antworten
Hallo, baut man anhand eines Kernel-Sources Module, nutzt Linux im Normalfall eine strikte V...
Problem beim Installieren von SuSe 12.3
Georg Prokert, 14.04.2013 00:04, 16 Antworten
Hallo, auf meinem neuem Laptop (Acer Aspire V3-771, Intel Core i5-3230 M, Intel HD Graphics 4...
lvm wieder loswerden
Peter Dibbern, 11.04.2013 16:28, 4 Antworten
Ich habe sämtliche alten Kisten ausgeschlachtet und aus der Teilen einen Rechner zusammengeschrau...