Dieser Abschnitt behandelt verschiedene Aspekte der Behandlung von Datumsinformationen in Ihren Natural-Anwendungen.
Folgende Themen werden behandelt:
Datumsformat für alphanumerische Darstellung - der DF-Parameter
Datumsformat für Standard-Seitenüberschriften - der DFTITLE-Parameter
Wenn Sie den Wert eines Datumsfeldes in einer bestimmten Form ausgeben möchten, geben Sie normalerweise für das Feld eine Editiermaske an. Mit der Editiermaske bestimmen Sie Zeichen für Zeichen, wie die Ausgabe aussehen soll.
Falls Sie das aktuelle Datum in einer bestimmten Form verwenden möchten, brauchen Sie hierfür kein Datumsfeld mit einer entsprechenden Editiermaske zu definieren; stattdessen können Sie einfach eine Datumssystemvariable verwenden. Natural bietet verschiedene Datumssystemvariablen, die alle das aktuelle Datum in unterschiedlichen Darstellungsformen enthalten. Bei manchen dieser Darstellungsformen ist die Jahreszahl zweistellig, bei manchen vierstellig.
Weitere Informationen sowie eine Liste aller Datumssystemvariablen finden Sie in der Systemvariablen-Dokumentation.
Der Profilparameter DTFORM bestimmt das Standardformat, das für
Datumsangaben als Teil von Natural-Standard-Reporttiteln, für Datumskonstanten und für
Datumseingaben gilt.
Dieses Datumsformat bestimmt die Reihenfolge der Angaben für Tag, Monat und Jahr sowie die Trennzeichen, die zwischen diesen Angaben stehen müssen.
Mögliche DTFORM-Einstellungen sind:
| Setting | Datumsformat1 | Beispiel2 |
|---|---|---|
DTFORM=I
|
yyyy-mm-dd
|
2014-01-31 |
DTFORM=G
|
dd.mm.yyyy
|
31.01.2014 |
DTFORM=E
|
dd/mm/yyyy
|
31/01/2014 |
DTFORM=U
|
mm/dd/yyyy
|
01/31/2014 |
1
dd = day/Tag,
mm = month/Monat,
yyyy = year/Jahr
2 Es wird angenommen, dass DF oder DFTITLE auf L gesetzt ist.
Der DTFORM-Parameter kann im Natural-Parametermodul oder dynamisch
beim Aufruf von Natural gesetzt werden. Standardmäßig gilt DTFORM=I.
Wenn eine Editiermaske angegeben ist, wird die Darstellung des Feldwertes durch die
Editiermaske bestimmt. Wenn keine Editiermaske angegeben ist, wird die Darstellung des
Feldwertes durch den Session-Parameter DF in Kombination mit dem DTFORM-Profilparameter
bestimmt.
Mit dem DF-Parameter können Sie eine der folgenden
Datumsdarstellungen wählen:
Bei jeder Darstellung wird die Reihenfolge von Tag, Monat und Jahr sowie die zu
verwendenden Begrenzungszeichen durch den DTFORM-Parameter bestimmt.
Standardmäßig gilt DF=S (außer bei INPUT-Statements; siehe
unten).
Der DF-Parameter
wird bei der Kompilierung ausgewertet.
Der DF-Parameter gilt bei folgenden Statements und in folgenden
Situationen:
INPUT, DISPLAY, WRITE und PRINT auf Statement- und
Elementebene (Feldebene)
MOVE, COMPRESS, STACK, RUN und FETCH auf Elementebene (Feldebene)
Bei Angabe in einem dieser Statements hat der DF-Parameter folgende Auswirkung:
| Statement | Auswirkung des DF-Parameters |
|---|---|
DISPLAY, WRITE, PRINT
|
Wenn der Wert einer Datumsvariablen mit einem dieser Statements ausgegeben
wird, wird der Wert in alphanumerische Darstellung umgesetzt, bevor er ausgegeben
wird. Der DF-Parameter bestimmt, welche Darstellung dafür
verwendet wird.
|
MOVE, COMPRESS
|
Wenn der Wert einer Datumsvariablen mit einem MOVE- oder
COMPRESS-Statement in ein alphanumerisches Feld übertragen wird,
wird der Wert in alphanumerische Darstellung umgesetzt, bevor er übertragen wird.
Der DF-Parameter bestimmt, welche Darstellung dafür
verwendet wird.
|
STACK, RUN, FETCH
|
Wenn der Wert einer Datumsvariablen auf dem Natural-Stack abgelegt wird,
wird er in alphanumerische Darstellung umgesetzt, bevor er auf dem Stack abgelegt
wird. Der DF-Parameter bestimmt, welche Darstellung dafür verwendet
wird.
Dasselbe gilt, wenn eine Datumsvariable als Parameter in einem
|
INPUT
|
Wenn eine Datumsvariable in einem INPUT-Statement verwendet
wird, bestimmt der DF-Parameter, in welcher Form ein Wert
in dieses Feld eingegeben werden muss.
Wenn dagegen eine Datumsvariable, für
die kein |
Anmerkung
Bei DF=S stehen nur zwei Stellen für die Jahresangabe zur Verfügung;
d.h. selbst wenn der Datumswert das Jahrhundert enthielte, ginge diese Information bei der
Umsetzung verloren. Um die Jahrhundertinformation zu behalten, müssen Sie
DF=I oder DF=L setzen.
Diese Beispiele basieren auf der Annahme, dass DTFORM=G.
/* DF=S (default) WRITE *DATX /* Output has this format: dd.mm.yy END
FORMAT DF=I WRITE *DATX /* Output has this format: ddmmyyyy END
FORMAT DF=L WRITE *DATX /* Output has this format: dd.mm.yyyy END
Dieses Beispiel basiert auf der Annahme, dass DTFORM=E.
DEFINE DATA LOCAL 1 #DATE (D) INIT <D'31/01/2014'> 1 #ALPHA (A10) END-DEFINE ... MOVE #DATE TO #ALPHA /* Result: #ALPHA contains 31/01/14 MOVE #DATE (DF=I) TO #ALPHA /* Result: #ALPHA contains 31012014 MOVE #DATE (DF=L) TO #ALPHA /* Result: #ALPHA contains 31/01/2014 ...
Dieses Beispiel basiert auf der Annahme, dass DTFORM=I.
DEFINE DATA LOCAL 1 #DATE (D) INIT <D'2014-01-31'> 1 #ALPHA1(A10) 1 #ALPHA2(A10) 1 #ALPHA3(A10) END-DEFINE ... STACK TOP DATA #DATE (DF=S) #DATE (DF=I) #DATE (DF=L) ... INPUT #ALPHA1 #ALPHA2 #ALPHA3 ... /* Result: #ALPHA1 contains 14-01-31 /* #ALPHA2 contains 20140131 /* #ALPHA3 contains 2014-01-31 ...
Dieses Beispiel basiert auf der Annahme, dass DTFORM=I.
DEFINE DATA LOCAL
1 #DATE1 (D)
1 #DATE2 (D)
1 #DATE3 (D)
1 #DATE4 (D)
END-DEFINE
...
INPUT #DATE1 (DF=S) /* Input must have this format: yy-mm-dd
#DATE2 (DF=I) /* Input must have this format: yyyymmdd
#DATE3 (DF=L) /* Input must have this format: yyyy-mm-dd
#DATE4 /* Input must have this format: yy-mm-dd or yyyymmdd
...
Der Session- bzw. Profilparameter DFOUT gilt nur für Datumsfelder in INPUT-, DISPLAY-, PRINT- und WRITE-Statements, für die keine Editiermaske angegeben ist und
für die kein DF-Parameter gilt.
Bei Datumsfeldern, die mit einem INPUT-, DISPLAY-,
PRINT- oder WRITE-Statement ausgegeben werden und für die
weder eine Editiermaske angegeben noch ein DF-Parameter gesetzt ist, bestimmt der
Profil/Session-Parameter DFOUT die Form, in der die Feldwerte
angezeigt werden.
Mit dem DFOUT-Parameter können Sie eine der folgenden
Datumsdarstellungsarten wählen:
DFOUT=S |
Datumsvariablen werden mit zweistelligem Jahr und mit durch den
DTFORM-Parameter bestimmten Begrenzungszeichen angezeigt:
Beispiel: |
|---|---|
DFOUT=I |
Datumsvariablen werden mit mit vierstelligem Jahr und ohne Begrenzungszeichen
angezeigt:
Beispiel:
|
Standardmäßig gilt DFOUT=S.
Bei beiden DFOUT-Einstellungen wird die Reihenfolge von Tag,
Monat und Jahr in den Datumswerten durch den DTFORM-Parameter bestimmt.
Die Länge eines Datumsfeldes wird durch die DFOUT-Einstellung
nicht beeinflusst, da jede der beiden Datumswertdarstellungen in ein 8 Byte langes Feld
passt.
Der DFOUT-Parameter kann im Natural-Parametermodul dynamisch beim
Aufrufen von Natural oder mit dem Systemkommando GLOBALS
gesetzt werden. Er wird zur Laufzeit ausgewertet.
Dieses Beispiel basiert auf der Annahme, dass DTFORM=I.
DEFINE DATA LOCAL
1 #DATE (D) INIT <D'2014-01-31'>
END-DEFINE
...
WRITE #DATE /* Output if DFOUT=S is set ...: 14-01-31
/* Output if DFOUT=I is set ...: 20140131
WRITE #DATE (DF=L) /* Output (regardless of DFOUT): 2014-01-31
...
Der Session- bzw. Profilparameter DFSTACK gilt nur für Datumsfelder, die in STACK-, FETCH- und RUN-Statements verwendet werden und für die kein DF-Parameter angegeben
ist.
Der DFSTACK-Parameter bestimmt die Form, in der die Werte von
Datumsvariablen mit einem STACK-, RUN- oder
RUN-Statement auf dem Natural-Stack abgelegt werden.
Mögliche DFSTACK-Einstellungen sind:
DFSTACK=S
|
8-Byte-Datumsvariablen werden mit zweistelligem Jahr und mit durch den
DTFORM-Parameter bestimmten Begrenzungszeichen auf dem
Natural-Stack abgelegt:
Beispiel: Diese Einstellung bewirkt, dass die Jahrhundert-Informationen nicht mit
abgelegt werden (und verlorengehen), wenn ein Datumswert auf dem Stack abgelegt
wird. Wenn dann der Wert vom Natural-Stack gelesen und in einer anderen Datumsvariable abgelegt
wird, wird entweder als Jahrhundert das aktuelle Jahrhundert genommen oder das
Jahrhundert durch die Einstellung des |
|---|---|
DFSTACK=C
|
Wie bei DFSTACK=S, aber mit folgendem Unterschied:
Natural gibt einen Laufzeitfehler aus, wenn der auf dem Natural-Stack abzulegende
Datumswert nicht mit dem des ursprünglichen Datumswerts identisch ist (entweder
aufgrund des |
DFSTACK=I
|
8-Byte-Datumsvariablen werden mit vierstelligem Jahr und ohne
Begrenzungszeichen auf dem Natural-Stack abgelegt:
Beispiel:
|
Standardmäßig gilt DFSTACK=S.
Bei jeder Datumsdarstellung werden die Reihenfolge von Tag, Monat und Jahr und die
Begrenzungszeichen (falls vorhanden) in den Datumswerten durch den DTFORM-Parameter
bestimmt.
Dieses Beispiel basiert auf der Annahme, dass DTFORM=I und YSLW=0.
DEFINE DATA LOCAL 1 #DATE (D) INIT <D'2014-01-31'> 1 #ALPHA1(A8) 1 #ALPHA2(A10) END-DEFINE ... STACK TOP DATA #DATE #DATE (DF=L) ... INPUT #ALPHA1 #ALPHA2 ... /* Result if DFSTACK=S or =C is set: #ALPHA1 contains 14-01-31 /* Result if DFSTACK=I is set .....: #ALPHA1 contains 20140131 /* Result (regardless of DFSTACK) .: #ALPHA2 contains 2014-01-31 ...
Mit dem Profilparameter YSLW können Sie das Jahrhundert eines zweistelligen
Jahr-Wertes bestimmen.
Der YSLW-Parameter kann im Natural-Parametermodul oder dynamisch beim Aufrufen von Natural gesetzt werden. Er wird zur Laufzeit ausgewertet, wenn ein alphanumerischer Datumswert mit einem zweistelligen Jahr in eine Datumsvariable übertragen wird. Dies betrifft Datumswerte, die:
mit der mathematischen
Funktion
VAL(field) verwendet
werden,
mit der Option IS(D) in einer logischen Bedingung verwendet werden,
vom Natural-Stack als Eingabedaten gelesen werden,
in ein Feld als Eingabedaten eingegeben werden.
Der YSLW-Parameter bestimmt den Bereich von Jahren, der von einem
sogenannten "gleitenden Jahr-Fenster" abgedeckt wird. Dieser Mechanismus geht
davon aus, dass ein Datum mit einem zweistelligen Jahr innerhalb eines
"Fensters" von 100 Jahren liegt. Innerhalb dieser 100 Jahre kann jeder
zweistellige Jahr-Wert eindeutig einem bestimmten Jahrhundert zugeordnet werden.
Mit dem YSLW-Parameter legen Sie fest, mit wie vielen Jahren in
der Vergangenheit der 100-Jahre-Bereich anfangen soll: das erste Jahr des Fensterbereichs
ergibt sich aus dem aktuellen Jahr minus dem YSLW-Wert.
Mögliche Werte des YSLW-Parameters sind 0 bis 99. Der Standardwert
ist YSLW=0, d.h. der "gleitende Jahr-Fenster"-Mechanismus ist
nicht aktiv; bei einem zweistelligen Jahr wird dann angenommen, dass es im aktuellen
Jahrhundert liegt.
Wenn das aktuelle Jahr 2014 ist und Sie YSLW=40 angeben, deckt das
"gleitende Jahr-Fenster" die Jahre 1974 bis 2072 ab. Ein zweistelliger
Jahr-Wert nn von 74 bis
99 wird dementsprechend als 19nn
interpretiert, während ein zweistelliger Jahr-Wert
nn von 00 bis 73 als
20nn interpretiert wird.

Wenn das aktuelle Jahr 2014 ist und Sie YSLW=20 angeben, deckt das
"gleitende Jahr-Fenster" die Jahre 1994 bis 2093 ab. Ein zweistelliger
Jahr-Wert nn von 94 bis
99 wird dementsprechend als 19nn interpretiert,
während ein zweistelliger Jahr-Wert nn von
00 bis 93 als 20nn interpretiert
wird.

Die folgenden Beispiele veranschaulichen die Auswirkung verschiedener Kombinationen der
Parameter DFSTACK
und YSLW.
Anmerkung
Alle diese Beispiele basieren auf der Annahme, dass DTFORM=I.
Dieses Beispiel geht vom aktuellen Jahr 2014 und folgenden Parametereinstellungen aus:
DFSTACK=S (Standardeinstellung)
und YSLW=20
DEFINE DATA LOCAL 1 #DATE1 (D) INIT <D'1956-12-31'> 1 #DATE2 (D) END-DEFINE ... STACK TOP DATA #DATE1 /* century information is lost (year 56 is stacked) ... INPUT #DATE2 /* year sliding window determines 56 to be 1956 ... /* Result: #DATE2 contains 1956-12-31
In diesem Fall ist das "gleitende Jahr-Fenster" unpassend gesetzt, so dass die Jahrhundert-Informationen sich (unbeabsichtigt) ändern.
Dieses Beispiel geht vom aktuellen Jahr 2014 und folgenden Parametereinstellungen aus:
DFSTACK=S (Standardeinstellung)
und YSLW=60
DEFINE DATA LOCAL 1 #DATE1 (D) INIT <D'1956-12-31'> 1 #DATE2 (D) END-DEFINE ... STACK TOP DATA #DATE1 /* century information is lost (year 56 is stacked) ... INPUT #DATE2 /* year sliding window determines 56 to be 1956 ... /* Result: #DATE2 contains 1956-12-31
In diesem Fall ist das "gleitende Jahr-Fenster" passend gesetzt, so dass die ursprünglichen Jahrhundert-Informationen korrekt wiederhergestellt werden.
Dieses Beispiel geht vom aktuellen Jahr 2014 und folgenden Parametereinstellungen aus:
DFSTACK=C und
YSLW=0 (Standardeinstellung)
DEFINE DATA LOCAL 1 #DATE1 (D) INIT <D'1956-12-31'> 1 #DATE2 (D) END-DEFINE ... STACK TOP DATA #DATE1 /* century information is lost (year 56 is stacked) ... INPUT #DATE2 /* 56 is assumed to be in current century -> 2056 ... /* Result: NAT1130 runtime error (Unintended century switch...)
In diesem Fall ändern sich (unbeabsichtigt) die Jahrhundert-Informationen. Allerdings
wird diese Änderung durch die Parametereinstellung DFSTACK=C abgefangen.
Dieses Beispiel geht vom aktuellen Jahr 2014 und folgenden Parametereinstellungen aus:
DFSTACK=C und
YSLW=60
DEFINE DATA LOCAL 1 #DATE1 (D) INIT <D'2056-12-31'> 1 #DATE2 (D) END-DEFINE ... STACK TOP DATA #DATE1 /* century information is lost (year 56 is stacked) ... INPUT #DATE2 /* year sliding window determines 56 to be 1956 ... /* Result: NAT1130 runtime error (Unintended century switch...)
In diesem Fall ändern sich die Jahrhundert-Informationen aufgrund des "gleitenden
Jahr-Fensters". Allerdings wird diese Änderung durch die Parametereinstellung
DFSTACK=C abgefangen.
Informationen zu diesem Thema entnehmen Sie der Beschreibung des Profilparameters
YSLW.
Der Session- bzw. Profilparameter DFTITLE bestimmt die Form des Datums in einer
Standard-Seitenüberschrift (wie sie mit
einem DISPLAY-, WRITE- oder PRINT-Statement ausgegeben wird).
Mit dem DFTITLE-Parameter können Sie eine der folgenden
Datumsdarstellungsarten wählen:
DFTITLE=S |
8-Byte-Datumsdarstellung mit zweistelligem Jahr und Begrenzungszeichen.
Beispiel: |
|---|---|
DFTITLE=L
|
10-Byte-Datumsdarstellung mit vierstelligem Jahr und Begrenzungszeichen.
Beispiel: |
DFTITLE=I |
8-Byte-Datumsdarstellung mit vierstelligem Jahr ohne Begrenzungszeichen.
Beispiel: |
Bei jeder dieser Ausgabeformen werden die Reihenfolge der Tages-, Monats- und
Jahreskomponenten sowie die verwendeten Begrenzungszeichen durch den DTFORM-Parameter
bestimmt.
Der DFTITLE-Parameter kann im Natural-Parametermodul dynamisch
beim Aufrufen von Natural oder mit dem Systemkommando GLOBALS gesetzt
werden. Er wird zur Laufzeit ausgewertet.
Dieses Beispiel geht von DTFORM=I aus.
WRITE 'HELLO' END /* /* Date in page title if DFTITLE=S is set ...: 14-01-31 /* Date in page title if DFTITLE=L is set ...: 2014-01-31 /* Date in page title if DFTITLE=I is set ...: 20140131
Anmerkung
Der DFTITLE-Parameter hat keine Auswirkungen auf
benutzerdefinierte Seitenüberschriften, wie sie mit einem WRITE
TITLE-Statement angegeben werden.