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-Angabe 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:
Einstellung | Datumsformat* | Beispiel |
---|---|---|
DTFORM=I
|
yyyy-mm-dd
|
2005-12-31 |
DTFORM=G
|
dd.mm.yyyy
|
31.12.2005 |
DTFORM=E
|
dd/mm/yyyy
|
31/12/2005 |
DTFORM=U
|
mm/dd/yyyy
|
12/31/2005 |
* dd
= day/Tag,
mm
= month/Monat,
yyyy
= year/Jahr.
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 der Tages-, Monats- und
Jahreskomponenten 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 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 2 Stellen für die Jahresangabe zur Verfügung;
d.h. selbst wenn der Datumswert das Jahrhundert enthielte, gingen diese
Informationen bei der Umsetzung verloren. Um die Jahrhundert-Angabe zu
behalten, setzen Sie DF=I
oder DF=L
.
Diese Beispiele gehen von DTFORM=G
aus.
/* 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 geht von DTFORM=E
aus.
DEFINE DATA LOCAL 1 #DATE (D) INIT <D'31/12/2005'> 1 #ALPHA (A10) END-DEFINE ... MOVE #DATE TO #ALPHA /* Result: #ALPHA contains 31/12/05 MOVE #DATE (DF=I) TO #ALPHA /* Result: #ALPHA contains 31122005 MOVE #DATE (DF=L) TO #ALPHA /* Result: #ALPHA contains 31/12/2005 ...
Dieses Beispiel geht von DTFORM=I
aus.
DEFINE DATA LOCAL 1 #DATE (D) INIT <D'2005-12-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 05-12-31 /* #ALPHA2 contains 20051231 /* #ALPHA3 contains 2005-12-31 ...
Dieses Beispiel geht von DTFORM=I
aus.
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.
Mögliche DFOUT
-Einstellungen sind:
DFOUT=S |
Datumsvariablen werden mit 2-stelliger Jahreskomponente und mit
durch den DTFORM -Parameter bestimmten Begrenzungszeichen
angezeigt (yy-mm-dd ).
|
---|---|
DFOUT=I |
Datumsvariablen werden mit mit 4-stelliger Jahreskomponente und
ohne Begrenzungszeichen angezeigt
(yyyymmdd ).
|
Standardmäßig gilt DFOUT=S
. Bei beiden
DFOUT
-Einstellungen wird die Reihenfolge der Tages-,
Monats- und Jahreskomponenten in den Datumswerten durch den
DTFORM
-Parameter bestimmt.
Die Länge eines Datumsfeldes wird durch die
DFOUT
-Einstellung nicht beeinflusst, da jede der beiden
Datumswert-Darstellungen 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 geht von DTFORM=I
aus.
DEFINE DATA LOCAL 1 #DATE (D) INIT <D'2005-12-31'> END-DEFINE ... WRITE #DATE /* Output if DFOUT=S is set ...: 05-12-31 /* Output if DFOUT=I is set ...: 20051231 WRITE #DATE (DF=L) /* Output (regardless of DFOUT): 2005-12-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:
Standardmäßig gilt DFSTACK=S
. 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 Stack in eine andere Datumsvariable eingelesen
wird, wird entweder als Jahrhundert das aktuelle Jahrhundert genommen oder das
Jahrhundert durch die Einstellung des YSLW
-Parameters
(siehe unten) bestimmt. Das kann
dazu führen, dass das Jahrhundert ein anderes ist als im ursprünglichen
Datumswert, ohne dass Natural in diesem Fall einen Fehler ausgibt.
DFSTACK=C
funktioniert insofern wie DFSTACK=S
,
dass ein Datumswert ohne Jahrhundert- Informationen auf dem Stack abgelegt
wird. Wenn allerdings der Wert vom Stack gelesen wird und das ermittelte
Jahrhundert nicht mit dem des ursprünglichen Datumswerts identisch ist
(entweder aufgrund des YSLW
-Parameters oder weil das
ursprüngliche Jahrhundert nicht das aktuelle ist), gibt Natural einen
Laufzeitfehler aus.
Anmerkung:
Dieser Laufzeitfehler wird bereits ausgegeben, sobald der Wert auf
dem Stack abgelegt wird.
Mit DFSTACK=I
können Sie einen Datumswert in einer Länge
von 8 Bytes auf dem Stack ablegen, ohne dass die Jahrhundert-Informationen
verlorengehen.
Der DFSTACK
-Parameter kann im
Natural-Parametermodul (bzw. der -Parameterdatei) dynamisch beim Aufrufen von
Natural oder mit dem Systemkommando GLOBALS
gesetzt werden. Er wird zur Laufzeit ausgewertet.
Dieses Beispiel geht von DTFORM=I
und
YSLW=0
aus.
DEFINE DATA LOCAL 1 #DATE (D) INIT <D'2005-12-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 05-12-31 /* Result if DFSTACK=I is set .....: #ALPHA1 contains 20051231 /* Result (regardless of DFSTACK) .: #ALPHA2 contains 2005-12-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 einer zweistelligen Jahreskomponente 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 Stack als Eingabedaten gelesen werden,
in ein Feld als Eingabedaten eingegeben werden.
Der YSLW
-Parameter bestimmt den Bereich von
Jahren, der von einem sogenannten "Year Sliding Window" abgedeckt
wird. Der "Sliding Window-"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
wievielen 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 "Sliding
Window"-Mechanismus ist nicht aktiv; bei einem zweistelligen Jahr wird
dann angenommen, dass es im aktuellen Jahrhundert liegt.
Wenn das aktuelle Jahr 2005
ist und Sie
YSLW=40
angeben, deckt das "Sliding Window" die Jahre
1965
bis 2064
ab. Ein zweistelliger Jahr-Wert
nn
von 65
bis
99
wird dementsprechend als
19nn
interpretiert, während ein
zweistelliger Jahr-Wert nn von 00
bis 64
als
20nn
interpretiert wird.
Wenn das aktuelle Jahr 2005
ist und Sie
YSLW=20
angeben, deckt das "Sliding Window" die Jahre
1985
bis 2084
ab. Ein zweistelliger Jahr-Wert
nn
von 85
bis
99
wird dementsprechend als
19nn
interpretiert, während ein
zweistelliger Jahr-Wert nn
von
00
bis 84
als
20nn
interpretiert wird.
Die folgenden Beispiele veranschaulichen die Wirkungen verschiedener
Kombinationen der Parameter DFSTACK
und
YSLW
.
Anmerkung:
Alle Beispiele gehen von DTFORM=I
aus.
Dieses Beispiel geht vom aktuellen Jahr 2005
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 2056 ... /* Result: #DATE2 contains 2056-12-31 even if #DATE1 is set to <D'2156-12-31'>
In diesem Fall ist das "Year Sliding Window" unpassend gesetzt, so dass die Jahrhundert-Informationen sich (unbeabsichtigterweise) ändern.
Dieses Beispiel geht vom aktuellen Jahr 2005
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 even if #DATE1 is set to <D'2056-12-31'>
In diesem Fall ist das "Year Sliding Window" passend gesetzt, so dass die urspünglichen Jahrhundert- Informationen korrekt wiederhergestellt werden.
Dieses Beispiel geht vom aktuellen Jahr 2005
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 -> 1956 ... /* Result: RUNTIME ERROR (UNINTENDED CENTURY CHANGE)
In diesem Fall ändern sich (unbeabsichtigterweise) die
Jahrhundert-Informationen. Allerdings wird diese Änderung durch die
Parametereinstellung DFSTACK=C
abgefangen.
Dieses Beispiel geht vom aktuellen Jahr 2005
und folgenden
Parametereinstellungen aus:
DFSTACK=C
und
YSLW=60
(Standardeinstellung)
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: RUNTIME ERROR (UNINTENDED CENTURY CHANGE)
In diesem Fall ändern sich die Jahrhundert-Informationen aufgrund des
"Year Sliding Window". 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).
DFTITLE=S |
Das Datum wird mit zweistelliger Jahreskomponente und
Begrenzungszeichen ausgegeben
(yy-mm-dd ).
|
---|---|
DFTITLE=L
|
Das Datum wird mit vierstelliger Jahreskomponente und
Begrenzungszeichen ausgegeben
(yyyy-mm-dd ).
|
DFTITLE=I |
Das Datum wird mit vierstelliger Jahreskomponente ohne
Begrenzungszeichen ausgegeben
(yyyymmdd ).
|
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 ...: 05-10-31 /* Date in page title if DFTITLE=L is set ...: 2005-10-31 /* Date in page title if DFTITLE=I is set ...: 20051031
Anmerkung:
Der DFTITLE
-Parameter
hat keine Auswirkungen auf benutzerdefinierte Seitenüberschriften, wie sie mit
einem
WRITE
TITLE
-Statement angegeben werden.