View Full Version : Datum um einen Tag erhöhen
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)
ungefähr so:
%dec(%char(%date(%days(%date(%char(qDatum):*cymd0) ) + 1)):8:0)
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
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.
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.
%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 :)
Etwas richtiger (siehe Birgitta) ist:
%dec(%char(%date(qdatum:*iso0) + %days(1):*iso0):8:0)
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!
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.
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