Tips und Techniken für die AS/400
Der 3. Teil der jährlichen Tips und Techniken jetzt online:
Thema: DATUMS- UND UHRZEITOPERATIONEN
Blitz Links:
Lokales Datum und die Ortszeit verwenden
Zeitstempel bis zu Tausendstelsekunden mit RPG
Konvertierung julianischer Datumsformate in Query/400
Neue Datums-Systemwerte
DATUMS- UND UHRZEITOPERATIONEN
Lokales Datum und die Ortszeit verwenden
Wenn Ihr Unternehmen über ein weltweites Netz von AS/400-Benutzern verfügt, wollen die Benutzer wahrscheinlich mit dem lokalen Datum und der Ortszeit des jeweiligen Standorts arbeiten. Leider besteht keine eingebaute OS/400-Funktion, die automatisch die lokale Zeit für eine individuelle Workstation festlegt. Es besteht jedoch die Möglichkeit, einen Datumsbereich zu erstellen, der mit einer Workstation (oder einem Benutzerprofil) verknüpft ist, mit dem dann die lokale Zeitzone als ein Offset der zentralen AS/400-Zeit oder der GMZ erkannt wird. Beispiel: Die Workstation DSP25 befindet sich in der mitteleuropäischen Zeitzone. Sie können den folgenden Datumsbereich erstellen:CRTDTAARA DTAARA(DSP25) +
TYPE(*CHAR) +
LEN(5) +
VALUE(‘+Ø1ØØ‘)
Das erste Zeichen des Wertes für den Datumsbereich muß ein Plus- oder Minuszeichen sein. Dadurch wird festgelegt, ob das System bei der Festlegung der Ortszeit Stunden zur GMZ addieren oder subtrahieren soll, um die Ortszeit zu ermitteln. Die nächsten beiden Zeichen geben die Anzahl der Stunden an, die addiert oder subtrahiert werden sollen, und die letzten beiden Zahlen sind für die Eingabe von Minuten reserviert.
Jede zeitabhängige Anwendung muß diesen Wert abfragen und die Zeit dann der Ortszeit anpassen. Die verschiedenen Programmiersprachen wenden dabei unterschiedliche Verfahren an. In RPG können Sie die aktuelle Systemzeit mit dem Operationscode TIME ermitteln und anschließend das Ergebnis entsprechend anpassen. In CL können Sie mit dem Befehl RTVSYSVAL (Systemwert ermitteln) die aktuelle Zeit vom QTIME-, QHOUR- oder QMINUTE-Systemwert abfragen. Anschließend können Sie den Wert der Ortszeit anpassen. Stellen Sie sicher, daß die Anwendungsprogramme dabei keine Systemwerte ändern, welche die Zeit beeinflussen.
Zeitstempel bis zu Tausendstelsekunden mit RPG
RPG bietet keine Möglichkeit für den Zugriff auf die Systemzeit im Tausendstelsekunden-Bereich. Wenn Sie für bestimmte Ereignisse einen Zeitstempel mit Tausendstelsekunden benötigen, müssen Sie eine physische Datei mit einem Zeitstempelfeld erstellen und oberhalb dieser physischen Datei eine logische Datei erstellen, in der das Zeitstempelfeld ausgeschlossen ist. Bei einem RPG-Schreibvorgang über die logische Datei füllt OS/400 das Zeitstempelfeld bis zur Tausendstelsekunde mit dem aktuellen Systemdatum ein.
Konvertierung julianischer Datumsformate in Query/400
Gemäß der Dokumentation Query/400 Use (SC41-5210) wird eine mit der DATE-Funktion verwendete 7-Byte-Zeichenkette als julianisches Datum im Format ccyyddd angesehen. Der folgende Ausdruck wandelt das julianische Datum im Format yyddd oder cyyddd in ein Datumsformat im Datumstyp um:
DATE(SUBSTR(DIGITS(19ØØØØ(SUØØ + JULDAT), 2 ,7))
Das Feld JULDAT muß dabei als numerisches Feld definiert werden.
Die Aufteilung des Ausdrucks in zwei Teile veranschaulicht den Vorgang. Die Ziffern-Operation ist:
DIGITS(19ØØØØTS(ØØ + JULDAT)
DIGITS gibt eine Zeichenrepräsentation einer Zahl zurück. Für ein JULDAT-Feld mit dem Wert 97225 oder 097225 ist das Ergebnis dieses Ausdrucks 01997225.
Die DATE-Operation ist:
DATE(SUBSTR(DATE_A, 2, 7)
Bei Verwendung der SUBSTR-Funktion zur Zuführung eines Zeichenstrings von genau sieben Byte an die DATE-Funktion wird die julianische Datumsregel von Query/400 aktiviert. Das Ergebnis ist das Datum 8/13/97 (das Datumsformat und das Separator-Zeichen hängen von den DATFMT- und DATSEP-Attributen des Jobs ab).
Neue Datums-Systemwerte
Mit V3R7 hat IBM einen neuen Systemwert eingeführt, der den aktuellen Wochentag enthält. Das System legt den QDAYOFWEEK-Wert automatisch abhängig vom aktuellen Wert des QDATE-Systemwertes fest. QDAYOFWEEK ist ein 4-Zeichen-Systemwert mit folgenden möglichen Werten *SUN, *MON, *TUE, *WED, *THU, *FRI oder *SAT.
Der Wert von QDAYOFWEEK kann nicht geändert werden, aber mit dem Befehl RTVSYSVAL (Systemwert ermitteln) können Sie den aktuellen Wert in einer Programmvariablen ermitteln.
QCENTRY ist ein relativ neuer Systemwert. Er wurde erst mit V3R2 eingeführt. Der QDATE-Systemwert (der QYEAR-Abschnitt von QDATE) bestimmt den Wert von QCENTURY, obwohl der QCENTURY-Indikator auch direkt geändert werden kann.
QCENTURY enthält eine 0 für jedes Datum von 1928 bis 1999 und eine 1 für jedes Datum von 2000 bis 2053. Datumsangaben vor 1928 oder nach 2053 werden von OS/400 nicht als Systemdaten unterstützt. Beim IPL für die AS/400 wird QCENTURY auf der Basis des bekannten 1940-2039-Fensters festgelegt. Mit dem Beginn des Jahrs 2000 wird der QCENTURY-Wert automatisch auf 1 geändert, um das neue Jahrhundert einzuleiten.
Ein fünfter Teil folgt.
Mit freundlichen Grüßen
- Ihr Burgy Zapp
![Künstler Burgy Zapp [http://burgyzapp.de]](http://newsolutions.de/it/wp-content/uploads//un6_IMG_2259_Z_Negativ-300x300.jpg)

