Files
TerminalBasic/tests/compat/datumzeit.bas
Chili Palmer a0fb41420e 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>
2026-09-04 07:01:53 +02:00

29 lines
758 B
QBasic

' 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$ =.
d# = DATESERIAL(1992, 3, 15)
PRINT YEAR(d#); MONTH(d#); DAY(d#); WEEKDAY(d#)
PRINT DATESERIAL(1900, 1, 1)
t# = TIMESERIAL(13, 45, 30)
PRINT HOUR(t#); MINUTE(t#); SECOND(t#)
PRINT DATEVALUE("03-15-1992") = d#; TIMEVALUE("13:45:30") = t#
DATE$ = "01-02-1993"
TIME$ = "10:20:30"
PRINT DATE$; " "; TIME$
PRINT YEAR(NOW); MONTH(NOW); DAY(NOW)
ON ERROR GOTO Fehler
x# = DATESERIAL(1992, 13, 1)
Weiter:
x# = TIMEVALUE("25:00")
Ende:
ON ERROR GOTO 0
PRINT "fertig"
END
Fehler:
PRINT "Fehler"; ERR
n% = n% + 1
IF n% = 1 THEN RESUME Weiter
RESUME Ende