Die von POSIX-Schnittstellen gelieferte Information über die lokale Uhrzeit kann unter bestimmten Umständen von der von den entsprechenden BS2000-Schnittstellen gelieferten Information abweichen. Das betrifft jedoch nicht die Information über die universelle Uhrzeit (UTC).
Der Grund für diese Abweichung ist, dass BS2000-Schnittstellen und POSIX-Schnittstellen separate Mechanismen zur "Lokalisierung" der Uhrzeit verwenden.
Im BS2000 gelten für die lokale Uhrzeit die Einstellungen, die in der Datei PARAMS.GTIME beim Systemstart festgelegt sind.
Beispiel:
/BS2000 PARAMS /BEGIN GTIME ZONE=+01:00 DIFF=1:00 SEASON=S CHDATE=1900-01-01/00:00 CHDATE=1980-04-06/02:00 CHDATE=1980-09-28/03:00 ... CHDATE=2020-03-29/02:00 CHDATE=2020-10-25/03:00 CHDATE=2021-03-28/02:00 CHDATE=2021-10-31/03:00 CHDATE=2022-03-27/02:00 CHDATE=2022-10-30/03:00 CHDATE=2023-03-26/02:00 CHDATE=2023-10-29/03:00 CHDATE=2024-03-31/02:00 CHDATE=2024-10-27/03:00 NEXTZONE ... /EOF /END-PARAMS
In POSIX gelten für die lokale Uhrzeit die Einstellungen, die beim Aufruf der betreffenden CRTE-Schnittstellen in der Umgebungsvariablen TZ festgelegt sind.
Beispiel (Standard-Einstellung = Mitteleuropa):
$ echo $TZ MEZ-1MSZ-2,M3.5.0/02:00:00,M10.5.0/03:00:00 $
Der Inhalt der Variablen TZ ist in diesem Beispiel folgendermaßen zu interpretieren:
MEZ-1
Standard-Zeitzone
Name | MEZ |
Differenz | MEZ - 01:00:00 = UTC |
MSZ-2 alternative Zeitzone
Name | MSZ |
Differenz | MSZ - 02:00:00 = UTC |
M3.5.0/02:00:00
Umschaltzeitpunkt zur alternativen Zeitzone
Monat | 3 = März |
Woche | 5 (oder 4, falls der Monat nicht 5 Wochen hat) |
Wochentag | 0 = Sonntag |
Uhrzeit | 02:00:00 |
M10.5.0/03:00:00
Rückschaltzeitpunkt zur Standard-Zeitzone
Monat | 10 = Oktober |
Woche | 5 (oder 4, falls der Monat nicht 5 Wochen hat) |
Wochentag | 0 = Sonntag |
Uhrzeit | 03:00:00 |
Versorgung der Variablen TZ in POSIX
Bei der Installation von POSIX-BC wird die Datei /etc/TIMEZONE mit folgendem Inhalt installiert:
TZ=MEZ-1MSZ-2,M3.5.0/02:00:00,M10.5.0/03:00:00
Hierbei handelt es sich um ein Shell-Skript, das die Variable TZ in der aufrufenden Shell setzt, wenn es per Punkt-Kommando ( . /etc/TIMEZONE
) aufgerufen wird. Die Variable TZ ist automatisch exportiert, d.h. sie wird automatisch an Kindprozesse vererbt.
Das Skript /etc/TIMEZONE wird bei jeder Art von POSIX-Login ausgeführt, also bei der Eröffnung einer Dialog- oder Batch-Session mit /START-POSIX-SHELL, bei rlogin, telnet, rsh und ssh. Außerdem wird es vor dem Starten von Dämonen durch die so genannten RC-Skripts ausgeführt.
Damit ist die Variable TZ in allen Dämonen und Login-Shells sowie in allen von diesen mit fork() erzeugten Prozessen versorgt und steuert damit die CRTE-Funktionen zur Ermittlung der lokalen Uhrzeit.
Die Datei /etc/TIMEZONE wird auch bei einer Upgrade-Installation von POSIX-BC neu installiert. Eventuell durch den Administrator vorgenommene Änderungen werden dadurch überschrieben.
Einschränkungen für den POSIX-Mechanismus mit der TZ-Variablen
Der POSIX-Mechanismus erlaubt nur eine feste Regel für die Umschaltzeitpunkte zwischen Standard- und alternativer Zeitzone und keine Variationen von Jahr zu Jahr. Das entspricht den heute geltenden EU-Regelungen.
Daher werden Zeitstempel, die vor 1996 liegen, d.h. vor der Einführung einer festen Regel für die Umstellzeitpunkte, unter Umständen fehlerhaft "lokalisiert".