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:
@@ -381,12 +381,16 @@ Dialoge:
|
||||
Betriebssystem-Handle bildet der Dialekt nicht ab und liefert 0.
|
||||
5c. **`CHDRIVE`** ist außerhalb von Windows folgenlos — Laufwerksbuchstaben
|
||||
gibt es dort nicht.
|
||||
6a. **Uhr läuft in UTC** (2026-09-03): `DATE$`, `TIME$`, `TIMER` und `NOW`
|
||||
liefern koordinierte Weltzeit, nicht Ortszeit — die Standardbibliothek
|
||||
von Rust kennt keine Zeitzonen, und eine Zeitzonenbibliothek wäre die
|
||||
erste schwere Abhängigkeit der Laufzeit. `DATE$ = …` und `TIME$ = …`
|
||||
stellen nicht die Systemuhr, sondern einen programmeigenen Versatz;
|
||||
alle Zeitfunktionen rechnen ihn mit ein.
|
||||
6a. **Uhr in Ortszeit, mit Rückfall auf UTC** (2026-09-04): `DATE$`,
|
||||
`TIME$`, `TIMER` und `NOW` rechnen in der Zeitzone des Rechners;
|
||||
`TIMER` zählt ab der **lokalen** Mitternacht. Der Versatz wird für den
|
||||
jeweils abgefragten Zeitpunkt bestimmt, nicht einmal beim Start — ein
|
||||
Programm, das über eine Zeitumstellung hinweg läuft, folgt ihr.
|
||||
Lässt sich die Zone des Rechners nicht ermitteln, gilt UTC; das
|
||||
Programm läuft weiter, und der Runner meldet es einmal beim Start auf
|
||||
der Fehlerausgabe („Zeitzone nicht ermittelbar …"). `DATE$ = …` und
|
||||
`TIME$ = …` stellen nicht die Systemuhr, sondern einen programmeigenen
|
||||
Versatz auf die Ortszeit; alle Zeitfunktionen rechnen ihn mit ein.
|
||||
6b. **Serielle Datumswerte** zählen Tage ab dem 30.12.1899 (Serie 2 =
|
||||
1.1.1900), der Nachkommaanteil ist die Tageszeit. `WEEKDAY` liefert 1
|
||||
für Sonntag. Zweistellige Jahre gelten in `DATESERIAL` als 19xx, in
|
||||
|
||||
Reference in New Issue
Block a user