Ortszeit statt UTC
Setzt den OpenSpec-Change phase-3-ortszeit um (21/21 Aufgaben) und zieht
damit die in Phase 3 eingegangene Abweichung zurueck: DATE$, TIME$, TIMER
und NOW rechnen in der Zeitzone des Rechners, TIMER zaehlt ab der lokalen
Mitternacht.
Versatzermittlung
- jiff 0.2.35 als Abhaengigkeit von tb-runtime
- datetime::utc_versatz(zeitpunkt) ist der einzige Aufrufpunkt der
Bibliothek; die Kalenderrechnung darunter bleibt Eigenimplementierung
und sieht sie nie -- zwei Kalendermodelle nebeneinander waeren eine
dauerhafte Fehlerquelle
- Der Versatz gilt je Zeitpunkt, nicht je Programmlauf: ein Programm, das
ueber eine Zeitumstellung hinweg laeuft, folgt ihr
Zonenzustand
- Zeitzone { System, Fest(i32), Unbekannt } im RtState
- Fest(n) macht Tests und Korpusprogramme unabhaengig von der Zone des
Testrechners; TZ waere prozessweit und set_var seit Rust 2024 unsafe
Rueckfallebene
- Ohne ermittelbare Zone gilt UTC, das Programm laeuft weiter
- tbc run meldet den Rueckfall einmal beim Start auf der Fehlerausgabe,
nicht je Abfrage -- ein stiller Wechsel waere ein Verstoss gegen den
Guiding Principle
Korpus
- Neue Direktive ' tb-tz: +-HH:MM im Harness
- zeitzone.bas prueft Ortszeit, TIMER ab lokaler Mitternacht und den
Programmversatz gegen eine gesetzte Uhrzeit
- datumzeit.bas auf die Direktive umgestellt; Sollausgabe unveraendert
Nebenbefund
- TIMER trennt jetzt ganze Sekunden (Ortszeit) vom Bruchteil
(Systemuhr). Ohne die Trennung waere TIMER in Zonen mit halbstuendigem
Versatz gesprungen.
Dokumentation: die Abweichung "Uhr laeuft in UTC" entfaellt aus
sprachreferenz.md; bibliothek.md und PLAN.md nachgezogen, jiff steht im
Stufe-2-Ideenspeicher neben crossterm.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -65,9 +65,18 @@ Serielle Werte zählen Tage ab dem 30.12.1899 (Serie 2 = 1.1.1900);
|
||||
der Nachkommaanteil ist die Tageszeit. `WEEKDAY` liefert 1 für Sonntag.
|
||||
Ungültige Datums- oder Zeitangaben lösen Fehler 5 aus.
|
||||
|
||||
Die Uhr läuft in **UTC** (dokumentierte Abweichung). `DATE$ = …` und
|
||||
`TIME$ = …` stellen nicht die Systemuhr, sondern einen
|
||||
programmeigenen Versatz, den alle Zeitfunktionen mitrechnen.
|
||||
Die Uhr rechnet in der **Ortszeit** des Rechners; `TIMER` zählt ab der
|
||||
lokalen Mitternacht. Der Versatz wird für den jeweils abgefragten
|
||||
Zeitpunkt bestimmt, nicht einmal beim Programmstart — ein Programm, das
|
||||
über eine Zeitumstellung hinweg läuft, folgt ihr.
|
||||
|
||||
Lässt sich die Zone nicht ermitteln, gilt UTC; das Programm läuft weiter
|
||||
und der Runner meldet es einmal beim Start auf der Fehlerausgabe.
|
||||
|
||||
`DATE$ = …` und `TIME$ = …` stellen nicht die Systemuhr, sondern einen
|
||||
programmeigenen Versatz auf die Ortszeit, den alle Zeitfunktionen
|
||||
mitrechnen. `DATEVALUE` und `TIMEVALUE` lesen Wanduhrzeit und rechnen
|
||||
nicht um.
|
||||
|
||||
## Deklaration
|
||||
|
||||
|
||||
Reference in New Issue
Block a user