date-magic unter Linux

Haben wir ein date? Na klar: Unter Linux kannst du immer ein date haben.

Wie? Ganz einfach. Frag sie, die Shell: 🐚

1
date

Ich wette: Sie antwortet dir!

Sieh es dir selbst an. Das hat sie zu mir gesagt:

1
Sat 24 Jan 2026 09:11:38 AM CET

Wow, ist das cool! Aber klar, jetzt weißt du es: Ich spreche über den date-Befehl unter Linux.

Und darüber, was du alles mit ihr anstellen kannst. 😆

Was kann ich mit date anstellen?

Lass mich noch ein wenig zeigen, was date kann.

Hier frage ich: Welcher Tag ist in 30 Tagen? Und ich lasse mir dafür nur das Datum im Format yyyy-mm-dd ausgeben:

1
date -d "$(date) +30 days" +%F

Was für ein Wochentag war mein Geburtstag?

1
date -d '2001-04-24' +%u

Die Ausgabe ist 2️⃣. Ich bin also ein Dienstags-Kind.

Probier es selbst aus!

Etwas formeller

Wie kannst du den date-Befehl allgemein aufrufen? Diese zwei Muster zeigt die man-Page:

1
2
date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

Macht noch nicht so viel Sinn? Kein Problem.

Sehen wir uns folgendes an:

  1. Werte für OPTION vom Befehl date
  2. und mögliche Angaben für FORMAT

Danach hast du einen guten Überblick über die Theorie, damit du die praktischen Beispiele besser verstehst!

Werte für OPTION, Formatierung und FORMAT

allgemeine Optionen

Hier sind ein paar allgemeine Optionen für date:

allgemeine OPTION Bedeutung
--debug Details zur internen Bearbeitung erhalten
-d, --date=STRING wie in STRING
-f, --file=DATEFILE wie -d/--date, aber für jede Zeile aus DATEFILE
--resolution Genauigkeit der Auflösung angeben
-r, --reference=FILE Anzeige der Bearbeitungs-Zeit von FILE
-s, --set=STRING Datum setzen, wie in STRING beschrieben

Steuerung vom Ausgabe-Format

Und diese Optionen steuern das Format der Ausgabe:

Format-OPTION Format
-I[FMT], --iso-8601[=FMT] ISO 8601, wo FMT die Genauigkeit angeben kann
-R, --rfc-email RFC 5322
--rfc-3339=FMT ISO 8601, wo FMT die Genauigkeit angeben kann
-u, --utc, --universal Format UTC (Universal Time Coordinated)

Bestandteile von Datum und Uhrzeit

Wenn wir über date sprechen, dann wäre es ohne die Parameter für die Formatierung der Ausgabe unvollständig.

Hier eine kleine Auswahl: 📅

Platzhalter Bedeutung
%A Wochentag in Langform
%F Datum im Format %+4Y-%m-%d
%H Stunde im 24h-Format
%N Nanosekunden
%q Quartal im Jahr (1..4)
%T Zeit im Format %H:%M:%S
%W Wochen-Nummer im Jahr (00..53)
%y Jahr 2-stellig
%Y Jahr 4-stellig
%Z Zeitzone im Kurzform (wie CET)

Die vollständige Liste findest du mit man date.

praktische Beispiele

Aber jetzt Schluss mit der Theorie. Lass uns ansehen, was du mit date so alles anstellen kannst.

Ordner mit Datum erstellen

Ein Ordner kann das aktuelle Datum als Namen haben:

1
mkdir $(date +%F)

Das Ergebnis kannst du mit ls überprüfen. Hier wird ein Ordner in folgendem Format erstellt:

1
2026-01-24

Datum als Unix-Timestamp formatieren

Jetzt rechnen wir ein menschenlesbares Datum in den Unix-Timestamp um.

So geht es mit einem festen Wert als Input:

1
2
3
date +%s --date="2020-01-03 14:20:04"
# die Ausgabe:
# 1578057604

Oder du willst das aktuelle Datum dynamisch als Input angeben:

1
2
3
date +%s --date="$(date)"
# mögliche Ausgabe:
# 1769237706

Unix-Timestamp als Datum formatieren

Auch in der umgekehrten Richtung ist es möglich:

1
2
3
date --date="@1769237706"
# mögliche Ausgabe:
# 2026-01-24

Details zur Umrechnung anzeigen

Wollen wir die oben genannten Umrechnungen genauer betrachten, dann nehmen wir einfach debug dazu:

1
2
date +%s --date="2020-01-03 14:20:04" --debug
date --date="@1769237706" --debug

Datum in Standard-Formaten ausgeben

Mit diversen Optionen kannst du das Datum in verschiedenen Standard-Formaten ausgeben:

1
2
3
4
5
date --iso-8601
date -R
date --rfc-email
date -u
date --utc

Datum mit beliebigem Format ausgeben

Du kannst auch das Datum in einem für dich passenden Format ausgeben:

1
2
3
4
date +%Y%m%d
date +%d.%m.%Y
date +%d.%m.%y
date +%F

Oder die Uhrzeit:

1
2
3
date +%H:%M
date +%H:%M:%S
date +%T

Den Tag im Jahr:

1
date +%j

Und so weiter.

Beachte bitte, dass manche Buchstaben in nach gross und klein unterschieden werden.

Zum Beispiel ist %S die Angabe der Sekunden, aber %s sind die Sekunden seit der Unix-Epoche (1970-01-01 00:00 UTC).

Verwendung der Ausgabe vom Datum

Du kannst direkt eine Datei oder einen Ordner mit Datum in Namen erstellen:

1
2
mkdir ordner_vom_$(date +%F)
touch datei_vom_$(date +%F)

Oder du speicherst den Wert in einer Variablen:

1
my_date=$(date +%Y_%m)

Und kannst die Variable so verwenden:

1
2
3
4
echo $my_date
mkdir $my_date
mkdir präfix_$my_date
mkdir ${my_date}_suffix

Bitte beachte, dass im letzten Befehl der Variablen-Name von geschweiften Klammern umgeben ist, damit die Shell was, was der Name der Variablen ist und was ich als Suffix angegeben habe.

Berechnung von Datums-Werten

Weiter oben hatten wir es ja schon: Mit date lässt sich auch wunderbar rechnen.

Hier noch eine kleine Auswahl dazu:

1
2
3
4
5
6
7
8
# aktuelle Zeit plus 3 Tage:
date -d 'now + 3 days' '+%Y-%m-%d'
# gehe vom 01.01.2024 zwei Wochen zurück und zeige nur das Datum an:
date -d '2024-01-01 - 2 weeks' '+%F'
# aktueller Unix‑Zeitstempel  plus 1 Tag (86.400 Sekunden):
date -d "@$(( $(date +%s) + 86400 ))" '+%F %T'
# letzter Freitag plus 25 Stunden:
date -d 'last Friday + 25 hours' '+%Y-%m-%d %H:%M'

Verwandte Befehle

Auch viele andere Befehle unter Linux haben mit Datum und Uhrzeit zu tun. Hier folgt noch eine kleine Auswahl.

Kalender mit cal

So zeigst du zum Beispiel einen Kalender für 3 Monate an und sagst, dass die Woche mit Montag (m) beginnt.

1
cal -3 -m

So sieht die Ausgabe aus:

1
2
3
4
5
6
7
    December 2025         January 2026          February 2026   
Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
 1  2  3  4  5  6  7            1  2  3  4                     1
 8  9 10 11 12 13 14   5  6  7  8  9 10 11   2  3  4  5  6  7  8
15 16 17 18 19 20 21  12 13 14 15 16 17 18   9 10 11 12 13 14 15
22 23 24 25 26 27 28  19 20 21 22 23 24 25  16 17 18 19 20 21 22
29 30 31              26 27 28 29 30 31     23 24 25 26 27 28   

Ausgabe vom Datum bei ls

So würde die Ausgabe vom Datum normalerweise bei ls -l aussehen:

1
2
drwx------. 1 sal sal 0 Jan 24 09:38 2026_01_suffix
-rw-------. 1 sal sal 0 Jan 24 09:37 datei_vom_2026-01-24

Finde ich nicht besonders lesbar. Du kannst stattdessen zum Beispiel das verwenden:

1
ls -hlF --time-style=long-iso

Etwas lang, um das jedes Mal zu schreiben? Ich habe einen Alias dafür definiert:

1
alias l='ls -hlF --time-style=long-iso'

Dann reicht l und ich bekomme mein gewünschtes Datums-Format ausgegeben:

1
2
drwx------. 1 sal sal 0 2026-01-24 09:38 2026_01_suffix/
-rw-------. 1 sal sal 0 2026-01-24 09:37 datei_vom_2026-01-24

Siehst du den Unterschied zu oben?

Hilfe zum date-Befehl

Ich könnte zwar noch mehr schreiben, aber das soll als erster Überblick reichen. ⏰

Falls du tiefer einstiegen willst, dann findest du hier noch viel mehr Details:

  • eingebaute Hilfe aufrufen: date --help
  • die gesamte Man-Page ansehen: man date
  • oder mit tldr eine kurze, praktische Hilfe: tldr date
Erstellt mit Hugo
Theme Stack gestaltet von Jimmy