View Full Version : Datum-Konvertierung free rpg
loeweadolf
18-11-05, 17:06
Ich habe ein 10-stelliges alphanumerisch Feld, welches ein Datum beinhaltet, z.B.: '2005-11-18' .
ich würde dieses Feld gerne in ein Datum-Feld konvertieren
*ISO.
Vorher sollte ich es wohl auf Plausibilität prüfen.
und das alles im free rpg.
wie gehe ich da vor ?
mfg. Ludger
Moin!
Erst mal prüfst Du den Inhalt mit
test(de) *iso meincharfeld;
if %error;
xxx
endif;
Dabei ist vorausgesetzt, dass Du das Datumsformat kennst. Falls nicht wirds halt ein bissle schwieriger.
Dann konvertierst Du den Inhalt mit
meindatumsfeld = %date(meincharfeld:*ISO);
Hoffe, ich hab das jetzt nach 6 grossen Feierabendbier noch ordentlich und richtig beschrieben ;-)
Grüsse
Martin
loeweadolf
18-11-05, 18:13
Hallo Martin,
auch die 6 Bier können Dir anscheinend nichts anhaben.
Die Lösung funktioniert.
Vielen Dank. Ludger
Hallo,
man könnte auch auf die ganze Testerei mit TEST(DE) verzichten, und einen Fehler über eine Monitor Group abfangen.
/Free
Monitor;
MyDateField = %Date(MyCharField: *ISO);
On-Error;
// Konvertierungs-Fehler
EndMon;
Man sogar die einzelnen Error-Codes gezielt abfangen:
112: Datums-, Zeit- oder Zeitmarkenwert ist ungültig.
113: Eine Berechnung mit Datums-, Zeit- oder Zeitmarkendaten hatte einen Über- oder Unterlauf zur Folge
114: Die Jahresangabe eines Datums- oder Zeitmarkenwerts liegt nicht innerhalb des korrekten Bereichs.
Birgitta
Mr.iSeries
13-03-08, 14:57
Habe auch hier ein Problem:
$prodateur = %date($prodat:*EUR);
wenn ich jetzt den 30.02.2008 eingebe ist das ja ein Fehler den ich mit *PSSR abfange.
BegSr *pssr;
// ¯¯¯¯¯¯¯
if %status = 112;
$prodateur = *loval;
ERR_Datum = *on;
write bild01;
leavesr;
endif;
EndSr;
Er geht auch in diese Subroutine hinein...
Will dann eine Fehlernachricht schreiben und mit LeaveSR zum Exfmt zurück...
Sobald er aber die Subroutine verlässt kommt wieder die Fehlermeldung.
Was mache ich falsch?
Vielen Dank für Eure Hilfe...
Hallo,
das ist jetzt nicht die Antwort auf Deine Frage, aber ...
Warum machst Du es nicht so:
/Free
Monitor;
$prodateur = %date($prodat:*EUR);
On-Error;
$prodateur = *loval;
ERR_Datum = *on;
write bild01;
//Und was Du sonst noch im Fehlerfall machen willst
EndMon;
/End-Free
Birgitta
Mr.iSeries
14-03-08, 06:21
Hallo,
das ist jetzt nicht die Antwort auf Deine Frage, aber ...
Warum machst Du es nicht so:
/Free
Monitor;
$prodateur = %date($prodat:*EUR);
On-Error;
$prodateur = *loval;
ERR_Datum = *on;
write bild01;
//Und was Du sonst noch im Fehlerfall machen willst
EndMon;
/End-Free
Birgitta
Vielen Dank, hat geklappt!