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:
@@ -1,4 +1,5 @@
|
||||
' tb-screen: 80x25
|
||||
' tb-tz: +02:00
|
||||
' Datum und Zeit (Spec konsolen-basisbibliothek): Serienwert-Zaehlweise,
|
||||
' Rueckumwandlung, WEEKDAY = 1 fuer Sonntag, Textformen und die
|
||||
' programmeigene Uhr ueber DATE$ =/TIME$ =.
|
||||
|
||||
18
tests/compat/zeitzone.bas
Normal file
18
tests/compat/zeitzone.bas
Normal file
@@ -0,0 +1,18 @@
|
||||
' tb-screen: 80x25
|
||||
' tb-tz: -05:00
|
||||
' Ortszeit (Spec konsolen-basisbibliothek): die Zeitfunktionen rechnen in
|
||||
' der Zone des Rechners. Der Korpus legt sie per tb-tz fest, damit die
|
||||
' Sollausgabe unabhaengig vom Standort des Testrechners bleibt.
|
||||
' Alle Werte werden gegen eine gesetzte Uhrzeit geprueft, nicht gegen die
|
||||
' echte -- sonst waere die Ausgabe nicht reproduzierbar.
|
||||
DATE$ = "03-15-1992"
|
||||
TIME$ = "13:45:30"
|
||||
PRINT DATE$; " "; TIME$
|
||||
n# = NOW
|
||||
PRINT YEAR(n#); MONTH(n#); DAY(n#); WEEKDAY(n#)
|
||||
PRINT HOUR(n#); MINUTE(n#); SECOND(n#)
|
||||
' TIMER zaehlt ab lokaler Mitternacht: 13*3600 + 45*60 + 30 = 49530.
|
||||
PRINT INT(TIMER)
|
||||
' Stunde aus TIME$ und aus NOW muessen uebereinstimmen.
|
||||
PRINT VAL(LEFT$(TIME$, 2)) = HOUR(n#)
|
||||
END
|
||||
5
tests/compat/zeitzone.out
Normal file
5
tests/compat/zeitzone.out
Normal file
@@ -0,0 +1,5 @@
|
||||
03-15-1992 13:45:30
|
||||
1992 3 15 1
|
||||
13 45 30
|
||||
49530
|
||||
-1
|
||||
Reference in New Issue
Block a user