From 1c8dcbdf18827eb34b32808b9830f18c152473c7 Mon Sep 17 00:00:00 2001 From: Chili Palmer Date: Fri, 4 Sep 2026 07:02:09 +0200 Subject: [PATCH] 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) --- .../.openspec.yaml | 0 .../2026-09-04-phase-3-ortszeit}/design.md | 0 .../2026-09-04-phase-3-ortszeit}/proposal.md | 0 .../specs/konsolen-basisbibliothek/spec.md | 0 .../2026-09-04-phase-3-ortszeit}/tasks.md | 0 .../specs/konsolen-basisbibliothek/spec.md | 57 +++++++++++++++++++ 6 files changed, 57 insertions(+) rename openspec/changes/{phase-3-ortszeit => archive/2026-09-04-phase-3-ortszeit}/.openspec.yaml (100%) rename openspec/changes/{phase-3-ortszeit => archive/2026-09-04-phase-3-ortszeit}/design.md (100%) rename openspec/changes/{phase-3-ortszeit => archive/2026-09-04-phase-3-ortszeit}/proposal.md (100%) rename openspec/changes/{phase-3-ortszeit => archive/2026-09-04-phase-3-ortszeit}/specs/konsolen-basisbibliothek/spec.md (100%) rename openspec/changes/{phase-3-ortszeit => archive/2026-09-04-phase-3-ortszeit}/tasks.md (100%) diff --git a/openspec/changes/phase-3-ortszeit/.openspec.yaml b/openspec/changes/archive/2026-09-04-phase-3-ortszeit/.openspec.yaml similarity index 100% rename from openspec/changes/phase-3-ortszeit/.openspec.yaml rename to openspec/changes/archive/2026-09-04-phase-3-ortszeit/.openspec.yaml diff --git a/openspec/changes/phase-3-ortszeit/design.md b/openspec/changes/archive/2026-09-04-phase-3-ortszeit/design.md similarity index 100% rename from openspec/changes/phase-3-ortszeit/design.md rename to openspec/changes/archive/2026-09-04-phase-3-ortszeit/design.md diff --git a/openspec/changes/phase-3-ortszeit/proposal.md b/openspec/changes/archive/2026-09-04-phase-3-ortszeit/proposal.md similarity index 100% rename from openspec/changes/phase-3-ortszeit/proposal.md rename to openspec/changes/archive/2026-09-04-phase-3-ortszeit/proposal.md diff --git a/openspec/changes/phase-3-ortszeit/specs/konsolen-basisbibliothek/spec.md b/openspec/changes/archive/2026-09-04-phase-3-ortszeit/specs/konsolen-basisbibliothek/spec.md similarity index 100% rename from openspec/changes/phase-3-ortszeit/specs/konsolen-basisbibliothek/spec.md rename to openspec/changes/archive/2026-09-04-phase-3-ortszeit/specs/konsolen-basisbibliothek/spec.md diff --git a/openspec/changes/phase-3-ortszeit/tasks.md b/openspec/changes/archive/2026-09-04-phase-3-ortszeit/tasks.md similarity index 100% rename from openspec/changes/phase-3-ortszeit/tasks.md rename to openspec/changes/archive/2026-09-04-phase-3-ortszeit/tasks.md diff --git a/openspec/specs/konsolen-basisbibliothek/spec.md b/openspec/specs/konsolen-basisbibliothek/spec.md index 0563fcc..14fec77 100644 --- a/openspec/specs/konsolen-basisbibliothek/spec.md +++ b/openspec/specs/konsolen-basisbibliothek/spec.md @@ -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