Kiste
DE

The book is currently only available in German.

Standard-Bibliothek — `zeit`

Verfügbar — implementiert in Phase B.7.6. Vollständige Spec in docs/zeit.md.

zeit führt einen eigenen Wert-Typ Zeit ein — analog Geld (Kapitel 20). Damit lassen sich Zeitpunkte sauber vergleichen, formatieren und parsen.

28.1 Aktuelle Zeit holen

nutze zeit

sag zeit.jetzt()              // 2026-05-07T20:23:00Z   (UTC)
sag zeit.jetzt_lokal()        // 2026-05-07T22:23:00+02:00   (System-Zone)
sag zeit.heute()              // 2026-05-07T00:00:00Z   (heute, Mitternacht UTC)

sag typ(zeit.jetzt())         // Zeit
sag typ(zeit.jetzt()) == Zeit // wahr

Default ist UTC. zeit.jetzt() liefert immer UTC. Die _lokal-Variante ist explizit. Begründung: TZ-Bugs sind eine eigene Bug-Klasse — eine klare „intern UTC"-Linie verhindert die meisten davon.

28.2 Aus Komponenten

nimm geburtstag = zeit.von_komponenten(2026, 5, 7)         // 00:00:00
nimm meeting = zeit.von_komponenten(2026, 5, 7, 14, 30, 0) // mit Uhrzeit

Ungültige Daten (30. Februar, Monat 13) werfen einen Fehler. Kein stilles „korrigieren" wie in manchen anderen Sprachen.

28.3 Komponenten lesen

nimm z = zeit.von_komponenten(2026, 5, 7, 14, 30, 0)

sag zeit.jahr(z)                  // 2026
sag zeit.monat(z)                 // 5
sag zeit.tag(z)                   // 7
sag zeit.wochentag(z)             // 4   (1=Mo ... 7=So, ISO-8601)
sag zeit.unix(z)                  // 1778164200 (Sekunden seit Epoch, UTC)

28.4 Format mit deutschen Tokens

zeit.formatiert(z, muster) ersetzt Tokens im Muster durch ihre Werte. Alles andere bleibt wörtlich.

Token Bedeutung Beispiel
JJJJ Jahr 4-stellig "2026"
MM Monat 2-stellig "05"
TT Tag 2-stellig "07"
hh Stunde 2-stellig (00–23) "14"
mm Minute 2-stellig "30"
ss Sekunde 2-stellig "00"
Wochentag Wochentag voll "Donnerstag"
Wo Wochentag kurz "Do"
Monatsname Monatsname voll "Mai"
Mo Monatsname kurz "Mai"

Alle Zahl-Tokens sind 2-stellig (mit führender Null wo nötig). Konsistent und vorhersagbar.

nimm z = zeit.von_komponenten(2026, 5, 7, 14, 30, 0)

sag zeit.formatiert(z, "TT.MM.JJJJ")            // "07.05.2026"
sag zeit.formatiert(z, "TT.MM.JJJJ hh:mm")      // "07.05.2026 14:30"
sag zeit.formatiert(z, "Wo, TT.MM.")            // "Do, 07.05."
sag zeit.formatiert(z, "Wochentag, TT. Mo")     // "Donnerstag, 07. Mai"

Backslash-Escape für literale Token-Buchstaben: """\T\T""""TT" (literal). Triple-Quoted-Strings nutzen, weil Kistes Lexer bei "\T" einen Lex-Fehler wirft.

28.5 ISO-8601 (RFC 3339)

sag zeit.formatiert_iso(z)                       // "2026-05-07T14:30:00Z"

nimm parsed = zeit.geparst_iso("2026-05-07T14:30:00Z")
sag zeit.jahr(parsed)                            // 2026

28.6 Custom-Format parsen

nimm z = zeit.geparst("07.05.2026", "TT.MM.JJJJ")
sag zeit.jahr(z)                                 // 2026

nimm m = zeit.geparst("2026-05-07 14:30", "JJJJ-MM-TT hh:mm")
sag zeit.stunde(m)                               // 14

28.7 Vergleich

nimm a = zeit.von_komponenten(2026, 5, 7)
nimm b = zeit.von_komponenten(2026, 5, 8)

sag zeit.ist_vor(a, b)                           // wahr
sag zeit.ist_nach(b, a)                          // wahr
sag zeit.ist_gleich(a, a)                        // wahr

28.8 Datei-Modtime

Mit dem Zeit-Typ wird datei.geändert(pfad) zur natürlichen Form:

nutze datei
nutze zeit

nimm modtime = datei.geändert("./readme.md")     // Zeit-Wert (Datei muss existieren)
sag zeit.formatiert(modtime, "TT.MM.JJJJ")       // "07.05.2026"

datei.geändert_unix(pfad) gibt's weiterhin für rohe Unix-Timestamps.

28.9 Schlaf

sag "Beginne..."
zeit.schlafe_ms(500)
sag "...nach 500ms"

28.10 Was nicht in zeit v1 ist

  • Arithmetik (zeit.plus_sekunden etc.) — bewusst nicht. Wer rechnen will, geht über unix_msganz-Arithmetik → von_unix_ms. Kleines Modul, weniger Sonderfälle.
  • Zonen-Konversion (zeit.in_zone(z, "Europe/Zurich")) — eigene Wurmkiste. Default ist UTC, lokal über _lokal.
  • Datums-only / Uhrzeit-only-TypenZeit deckt beides ab.
  • Kalender-Iteration (jeder Werktag in einem Bereich) — eigenes Modul / v2.