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.