konsolen-basisbibliothek um drei Anforderungen erweitert: Zeitfunktionen liefern Ortszeit, Zonenermittlung mit Rueckfallebene, Programmversatz wirkt auf die Ortszeit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3.7 KiB
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$,TIMERundNOWrechnen in der Zeitzone des Rechners statt in UTC.TIMERzä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 intb-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_sekundenliefern Ortszeit. Die Kalenderrechnung bleibt unverändert.crates/tb-runtime/src/builtins.rs:DATE$,TIME$,TIMER,NOWrechnen über die neue Funktion.Cargo.toml(Workspace) undcrates/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.