Anmelden

View Full Version : extract timestamp in num. Feld



Seiten : [1] 2

muadeep
25-02-11, 10:22
hallo *all

ich benötige aus einem TimeStamp Feld (=Dantenbank mit SQL erstellt) nur das Datum und dieses in einer 8 stelligen RPG Variablen


Datum:
2007-04-24-10.48.20.000000

in der RPG-Variablen sollte dann folgendes stehen:

20070424

kann ich das irgendwie mit EVAL .... auslesen/übertragen?

Fuerchau
25-02-11, 10:25
JJJJMMTT =

%dec(%char(%date(MyTimeStamp):*iso0):8:0)

TTMMJJJJ =

%dec(%char(%date(MyTimeStamp):*eur0):8:0)

muadeep
25-02-11, 10:38
D DatumX s 8 0 inz(0)

DatumX = %dec(%char(%date(DATUM):*ISO0):8:0);da bekomm ich dann aber immer folgenden Fehler:


Datums-, Zeit- oder Zeitmarkenwert ist ungültig (C G D F).

B.Hauser
25-02-11, 10:42
JJJJMMTT = %Dec(%Date(MyTimestamp): *ISO);

Sollte eigentlich reichen. Eine zusätzliche Konvertierung in eine alphanumerische Darstellung (%CHAR) ist nur erforderlich, wenn Du noch nicht auf Release V5R3 bist.

Vor Release V5R3 kann auch %DEC() durch %INT ersetzt werden (dann müssen weder Länge noch Nachkommastellen angegeben werden:


JJJJMMTT = %Int(%Char(%Date(MyTimeStamp): *ISO0));


... bist Du sicher, dass DATUM eine gültige Zeitmarke enthält?

Birgitta

muadeep
25-02-11, 11:53
@Birgitta

es kommt die selbe Fehlermeldung

sicher bin ich mir nicht, aber ich geh mal davon aus! :rolleyes:

Feld sieht wie folgt aus und ist wie folgt beschrieben:


DATUM:
2010-04-19-13.57.08.000000

Name von bis Länge Dat.Art E/A Bezeichnung
DATUM 47 72 26 Z B

Fuerchau
25-02-11, 11:58
Wenn ich nicht mit %char(Datum:*iso0) arbeite, kommt bei mir auch immer der Fehler.

Alternativ geht aber auch:

%subdt(Datum:*years) * 10000 + %subdt(Datum:*months) * 100 + %subdt(Datum:*days)

Es gibt wie immer mehrere Möglichkeiten.

In SQL arbeite ich genauso:

year(Datum) * 10000 + month(Datum) * 100 + day(Datum)

Fuerchau
25-02-11, 12:12
Achja, noch zu wissen:

Eine Zeitmarke ist immer im ISO-Format.
Ein Datum ist immer im angegeben Datumformat der H-Zeile (DATFMT, default ist glaube ich *dmy oder *eur) .
Ggf. kann daher %dec(%date(Datum)) nicht umwandeln.

Durch die genaue Angabe
%char(%date(Datum):*iso0)
ist man dann auf der sicheren Seite, unabhängig von der H-Definition.

Pikachu
25-02-11, 12:39
EVAL JJJJMMTT = %DEC(
%SUBST(%CHAR(ZEITMARKE):1:4)
+ %SUBST(%CHAR(ZEITMARKE):6:2)
+ %SUBST(%CHAR(ZEITMARKE):9:2):8:0)

muadeep
25-02-11, 13:14
hab jetzt mal folgendes probiert,
aber leider hat keine dieser Varianten funktioniert! :mad: :(


H Option(*SrcStmt : *NoDebugIO) Datedit(*DMY) DatFmt(*ISO)
H DftActGrp(*No)

D DatumX s 8 0 inz(0)

DatumX = %uns(%char(%date(DATUMA:*DMY):*ISO0));
DatumX = %uns(%char(%date(DATUM:*ISO):*ISO0));
DatumX = %dec(%char(%date(DATUM):*ISO0):8:0);
DatumX = %dec(%char(%date(DATUM):*eur0):8:0);

DatumX = %int(%char(%date(DATUM): *ISO0));

DatumX = %DEC(
%SUBST(%CHAR(Datum):1:4)
+ %SUBST(%CHAR(Datum):6:2)
+ %SUBST(%CHAR(Datum):9:2):8:0);

Pikachu
25-02-11, 13:22
Eine Zeitmarke in einer externen Datei wird wie es aussieht als alphanumerisches Feld A(26) ins RPG-Programm hereingeholt, sieh mal in der Umwandlungsliste nach.

Probier dann mal so:

EVAL DATUMX = %DEC(%SUBST(DATUM:1:4)
+ %SUBST(DATUM:6:2)
+ %SUBST(DATUM:9:2):8:0)