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_sekundenetc.) — bewusst nicht. Wer rechnen will, geht überunix_ms→ganz-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-Typen —
Zeitdeckt beides ab. - Kalender-Iteration (jeder Werktag in einem Bereich) — eigenes Modul / v2.