## ADDED Requirements ### 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