PDA

View Full Version : Datumsrechnen



Robi
15-09-09, 09:30
Hi

ich habe hier in einem RPGLE Pgm ein

C *YMD move DT2 RRDT2


DT2 ist ein Datumsfeld

D DT2 S D

lt Debug mit dem Inhalt 2009-03-15

RRDT2 ist ein Nuerisches Feld in einer DS, 8 stellig ohne NK-Stellen
nach dem move steht in RRDT2 00090315
d.h. die 2 fehlt
Das ist mir nicht klar, wer kann helfen ?

Danke,
Robi

prsbrc
15-09-09, 09:46
Wenn mich nicht alles täuscht ist bei *YMD das Jahr nur 2stellig.
Versuch es anstatt dem move mit einem eval und %dec(DATUM)

d datum s d inz(*sys)
d xx s 8 0

c eval xx=%dec(datum)

lg

B.Hauser
15-09-09, 10:01
*YMD im Faktor1 besagt, dass das numerische Zieldatum im Format YYMMDD ausgegeben werden soll. Soll das Zieldatum im Format YYYYMMDD ausgegeben werden, lass entweder den Faktor1 leer oder gibt *ISO an.

Das gleiche gilt auch für den 2.Parameter, wenn Du die Built-In-Funktion %DEC zum Konvertieren verwendest.

Die Datumsformate *YMD, *MDY und *DMY haben immer ein 2-stelliges Jahr. Die Datumsformate mit dem 4-stelligen Jahr sind *ISO, *EUR, *USA, *JIS

Birgitta

Robi
15-09-09, 10:01
Hi,
klar, deine Lösung geht, danke.
Trotzdem versteh ich es nicht.
In dem Pgm wird vorher ein 8-stelliges numerisches Feld mit 20090709 über

*YMD move RRDT1 DT1 übertragen und kommt (im Datumsfeld) auch als 2009-07-09 an.
Und umgekehrt schneidet er 2 Stellen ab ?
ganz schön dämlich
Na ja, es geht ja wieder. Danke
Gruß
Robi

@Birgitta
Danke für die Erklärung!

Fuerchau
15-09-09, 10:40
Das liegt daran, dass ein Datumfeld das Jahr immer 4-stellig enthält.
Durch *YMD wird das Jahr auf 2 Stellen gekürzt und nach der alten Regel "Jahr < 40, dann + 2000 sonst + 1900" ergänzt.