Dieses Dokument 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.