Anmelden

View Full Version : Datum um einen Tag erhöhen



muadeep
06-06-07, 12:59
wie kann man im ILE, am schnellsten ein nummerisches Feld (qDatum), welches ein Datum beinhaltet, um einen Tag erhöhen!



D qDatum S 8 0 inz(20070606)

Fuerchau
06-06-07, 13:09
ungefähr so:

%dec(%char(%date(%days(%date(%char(qDatum):*cymd0) ) + 1)):8:0)

B.Hauser
06-06-07, 13:43
Hallo,

Ich würde es so probieren:


/Free
NewDate = %Dec(%Date(qDatum: *ISO) + %Days(1): 8: 0);
/End-Free


Solltest Du noch nicht auf V5R3 sein, versuch' es so:


/Free
NewDate = %Int(%Char(%Date(qDatum: *ISO) + %Days(1): ISO0));
/End-Free


Birgitta

muadeep
06-06-07, 14:02
Hab noch mal nachgeschaut, wir haben def.:
Type 9406; Model 550; Rel V5R3M0


und genau dieses Statement funkt. leider nicht! :-(


/Free
NewDate = %Dec(%Date(qDatum: *ISO) + %Days(1): 8: 0);
/End-Free der Compiler bringt mir dann immer folgende Fehlermeldungen:

*RNF0339 20 1 Für %DEC dürfen nur zwei Parameter angegeben werden, wenn der
zweite Parameter ein Datenformat ist.
*RNF0328 30 1 Der zweite Parameter für %DEC oder %DECH ist ungültig.

Fuerchau
06-06-07, 14:07
Deswegen musst du ein "%CHAR( ber. datum :*CYMD0)" einfügen.

PS:
Bei der Funktion %date beschreibt der 2. Parameter das Quellformat, in deinem Fall also *CYMD0, das Ergebnis ist immer eine variable vom Typ DATE.

Bei %char wiederum ist der 2. Parameter das Zielformat.

angelone
06-06-07, 14:26
%dec(%char(%date(%days(%date(%char(qDatum):*cymd0) ) + 1)):8:0)
supergeil.
würd ich so eine zeile in nem programm hier finden, ich würd erstmal dumm gucken und danach den debugger bemühen um zu sehen was es tut :)

Fuerchau
06-06-07, 14:57
Etwas richtiger (siehe Birgitta) ist:

%dec(%char(%date(qdatum:*iso0) + %days(1):*iso0):8:0)

B.Hauser
06-06-07, 14:58
Sorry,

ich hab' gepennt, das Statement muss natürlich so heißen:


/Free
NewDate = %Dec(%Date(qDatum: *ISO) + %Days(1): *ISO);
/End-Free


@Fuerchau:
Schau Dir mal die Datums-Formate an:
Für das heutige Datum liefert CYMD0: 1070606!

Fuerchau
06-06-07, 15:19
Stimmt, mit CYMD wird nur 3-stelliges Jahr geliefert, deshalb habe ich michauch verbessert.

*ISO liefert und erwartet allerdings die Trennzeichen, *ISO0 funktioniert, habe ich gerade ausprobiert.

PS:
Seit wann akzeptiert %dec ein DATE-Format ?

PPS:
Stimmt, %DEC akzeptiert ein DATE, dann gilt *ISO als Modifikator.

Pikachu
08-06-07, 12:51
Oder so (aber ohne Gewähr)! ;)

D QDATUM S 8P 0 INZ(20070606)
D QDATUM1 S D DATFMT(*ISO)
D
C *ISO MOVE QDATUM QDATUM1
C ADDDUR 1:*DAYS QDATUM1
C *ISO MOVE QDATUM1 QDATUM