OpenSpec: phase-3-ortszeit archiviert, Delta-Specs gesynct

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>
This commit is contained in:
2026-09-04 07:02:09 +02:00
parent a0fb41420e
commit 1c8dcbdf18
6 changed files with 57 additions and 0 deletions

View File

@@ -230,3 +230,60 @@ variieren; der Ersatzwert MUST in docs/sprachreferenz.md unter
#### Scenario: Unbekannte Umgebungsvariable
- **WHEN** `ENVIRON$` für einen nicht gesetzten Namen ausgewertet wird
- **THEN** ist das Ergebnis der leere String
### Requirement: Zeitfunktionen liefern Ortszeit
`DATE$`, `TIME$`, `TIMER` und `NOW` SHALL den Zeitpunkt in der Zeitzone
des Rechners liefern, nicht in koordinierter Weltzeit. `TIMER` SHALL die
Sekunden seit der **lokalen** Mitternacht zählen. Der maßgebliche Versatz
SHALL für den jeweils abgefragten Zeitpunkt bestimmt werden, nicht einmal
beim Programmstart — ein Programm, das über eine Zeitumstellung hinweg
läuft, folgt ihr. Die Zerlegungsfunktionen (`DAY`, `MONTH`, `YEAR`,
`WEEKDAY`, `HOUR`, `MINUTE`, `SECOND`) arbeiten unverändert auf seriellen
Werten und rechnen selbst nicht um.
#### Scenario: Datum und Uhrzeit stimmen mit der Systemuhr überein
- **WHEN** ein Programm `DATE$` und `TIME$` abfragt
- **THEN** entsprechen sie der Ortszeit des Rechners zum Abfragezeitpunkt
#### Scenario: TIMER zählt ab lokaler Mitternacht
- **WHEN** `TIMER` abgefragt wird
- **THEN** entspricht der Wert den Sekunden seit der letzten lokalen Mitternacht, nicht seit der UTC-Mitternacht
#### Scenario: NOW und die Zerlegungsfunktionen passen zusammen
- **WHEN** `n# = NOW` gebildet und `HOUR(n#)` ausgewertet wird
- **THEN** liefert `HOUR(n#)` dieselbe Stunde, die auch `TIME$` nennt
#### Scenario: Sommerzeit wirkt zum jeweiligen Zeitpunkt
- **WHEN** in einer Zone mit Sommerzeit ein Zeitpunkt vor und einer nach der Umstellung abgefragt wird
- **THEN** unterscheiden sich die beiden Versätze um die Umstellungsspanne
### Requirement: Zonenermittlung mit Rückfallebene
Die Laufzeit SHALL die Zeitzone des Rechners über die
Betriebssystemeinstellung bestimmen. Lässt sie sich nicht ermitteln,
SHALL UTC gelten und das Programm ohne Fehler weiterlaufen. Ob die
Rückfallebene greift, MUST für ein Programm erkennbar sein und in
docs/sprachreferenz.md beschrieben stehen; ein stiller Wechsel auf UTC
MUST NOT vorkommen.
#### Scenario: Zone nicht ermittelbar
- **WHEN** die Zeitzone des Rechners nicht bestimmt werden kann
- **THEN** rechnen die Zeitfunktionen in UTC und das Programm läuft ohne Fehler weiter
#### Scenario: Rückfallebene ist erkennbar
- **WHEN** ein Programm den Zonenzustand abfragt
- **THEN** unterscheidet die Antwort erkennbar zwischen ermittelter Zone und Rückfall auf UTC
### Requirement: Programmversatz wirkt auf die Ortszeit
`DATE$ = text$` und `TIME$ = text$` SHALL weiterhin nicht die Systemuhr
stellen, sondern einen programmeigenen Versatz setzen. Dieser Versatz
SHALL auf die **Ortszeit** wirken: nach `TIME$ = "10:20:30"` nennt
`TIME$` diese Uhrzeit, und `NOW`, `HOUR` und `TIMER` stimmen damit
überein.
#### Scenario: Gesetzte Uhrzeit wird zurückgelesen
- **WHEN** `TIME$ = "10:20:30"` ausgeführt und danach `TIME$` abgefragt wird
- **THEN** nennt `TIME$` `10:20:30`
#### Scenario: Versatz wirkt auf alle Zeitfunktionen
- **WHEN** `DATE$ = "01-02-1993"` gesetzt und danach `YEAR(NOW)` ausgewertet wird
- **THEN** liefert `YEAR(NOW)` 1993