# Ortszeit statt UTC ## Why `DATE$`, `TIME$`, `TIMER` und `NOW` liefern heute koordinierte Weltzeit. Das ist keine Rekonstruktion des Vorbilds, sondern eine Notlösung: die Standardbibliothek von Rust kennt keine Zeitzonen, und in `phase-3-runtime-bildschirm` sollte die erste schwere Abhängigkeit der Laufzeit nicht nebenbei entstehen. Die Abweichung steht in docs/sprachreferenz.md. Für ein BASIC zum Bauen von Terminal-Werkzeugen ist das ein echter Mangel: Ein Programm, das eine Uhr anzeigt, ein Protokoll schreibt oder einen Termin prüft, zeigt schlicht die falsche Zeit — je nach Zone um Stunden daneben. Das Vorbild lief auf der Ortszeit des Rechners; jedes übernommene Programm rechnet damit. Der Projektinhaber hat am 2026-09-04 entschieden, dafür eine Bibliothek in die Laufzeit aufzunehmen. Dieser Change zieht die Abweichung zurück. ## What Changes - **Zeitfunktionen liefern Ortszeit**: `DATE$`, `TIME$`, `TIMER` und `NOW` rechnen in der Zeitzone des Rechners statt in UTC. `TIMER` zählt Sekunden seit der **lokalen** Mitternacht. - **Sommerzeit wird berücksichtigt**: Der Versatz wird für den jeweiligen Zeitpunkt bestimmt, nicht einmalig beim Programmstart — ein Programm, das über einen Zeitumstellungspunkt hinweg läuft, folgt ihm. - **Neue Abhängigkeit in `tb-runtime`**: eine Zeitzonenbibliothek, deren Berührungsfläche bewusst auf eine einzige Frage beschränkt bleibt — „welcher UTC-Versatz gilt zu diesem Zeitpunkt?". Die Kalenderrechnung (serielle Datumswerte, `WEEKDAY`, Zerlegung) bleibt die vorhandene, getestete Eigenimplementierung in `tb-runtime::datetime`. - **Rückfallebene**: Lässt sich die Zeitzone des Rechners nicht ermitteln, gilt UTC. Das Programm läuft weiter; die Rückfallebene ist über eine Funktion der Laufzeit erkennbar und dokumentiert. - **`DATE$ =` / `TIME$ =` bleiben ein Programmversatz** (sie stellen nicht die Systemuhr) — sie wirken künftig auf die Ortszeit. - **Abweichung zurückziehen**: Der Eintrag „Uhr läuft in UTC" entfällt aus docs/sprachreferenz.md; an seine Stelle tritt die Beschreibung der Zonenermittlung samt Rückfallebene. - **Stufe 2 im PLAN**: Die Zeitzonenbibliothek wird in den Ideenspeicher „Runtime-Bibliotheken als BASIC-Bibliotheken" aufgenommen — neben crossterm —, damit BASIC-Programme später direkt auf Zonen zugreifen können (Zonennamen, Versatz zu einem Zeitpunkt, Umrechnung zwischen Zonen). **Non-Goals:** Zeitzonenbehaftete Datentypen im Dialekt (das Vorbild kennt nur lokale Wanduhrzeit); eine Sprachanbindung an die Bibliothek (das ist der Stufe-2-Eintrag, nicht dieser Change); Änderungen an der Zählweise serieller Datumswerte oder an `DATEVALUE`/`TIMEVALUE`, die Wanduhrzeit lesen und daher keine Umrechnung brauchen. ## Capabilities ### Modified Capabilities - `konsolen-basisbibliothek`: Die Datums- und Zeitfunktionen SHALL die Ortszeit des Rechners liefern statt UTC, einschließlich Sommerzeit und einer dokumentierten Rückfallebene. ## Impact - `crates/tb-runtime/src/datetime.rs`: Versatzermittlung über die neue Bibliothek; `jetzt_serial`/`jetzt_sekunden` liefern Ortszeit. Die Kalenderrechnung bleibt unverändert. - `crates/tb-runtime/src/builtins.rs`: `DATE$`, `TIME$`, `TIMER`, `NOW` rechnen über die neue Funktion. - `Cargo.toml` (Workspace) und `crates/tb-runtime/Cargo.toml`: neue Abhängigkeit. - `tests/compat`: Korpusprogramm für die Zeitfunktionen, das ohne Abhängigkeit von der Zone des Testrechners prüfbar bleibt. - `docs/sprachreferenz.md`: Abweichung „Uhr läuft in UTC" entfällt; Zonenermittlung und Rückfallebene beschrieben. - `docs/bibliothek.md`: Abschnitt Datum/Zeit fortgeschrieben. - `PLAN.md`: Stufe-2-Eintrag um die Bibliothek erweitert.