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:
@@ -230,3 +230,60 @@ variieren; der Ersatzwert MUST in docs/sprachreferenz.md unter
|
|||||||
#### Scenario: Unbekannte Umgebungsvariable
|
#### Scenario: Unbekannte Umgebungsvariable
|
||||||
- **WHEN** `ENVIRON$` für einen nicht gesetzten Namen ausgewertet wird
|
- **WHEN** `ENVIRON$` für einen nicht gesetzten Namen ausgewertet wird
|
||||||
- **THEN** ist das Ergebnis der leere String
|
- **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
|
||||||
|
|||||||
Reference in New Issue
Block a user