[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2007
    Beiträge
    905

    Datumsformate *EUR und *ISO

    Hi *all,

    ich habe eine Verständnisfrage.

    Ausgangslage:
    ctl-opt datfmt(*EUR) timfmt(*EUR);

    dcl-s myDate like(RecDate); // RecDate = date(*iso)

    Ich mache nun:

    myDate = *loval;

    Ergebnis in myDate: 01.01.0001 !!!

    Eigentlich würde ich da 0001.01.01 erwarten. Ist das nun effektiv so, dass der "ctl-opt datfmt(*EUR) den referenzierten field declare übersteuert?

    Gelöst hab ich das jetzt mit einem neu definierten Feld, also "dcl-s myDate date(*iso)".
    Ist halt eine reine Interessensfrage bzw. würde schon gerne mit referenzierten Feldern arbeiten - aber wenn's nischt geht, dann gehts halt nischt.

    Danke.
    kf

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Für die Anzeige und die Initialisierung einer Variablen wird immer das Datum aus der H-Bestimmung genommen. Sofern in den H-Bestimmungen kein Format angegeben wird, wird Format *ISO verwendet.

    Das Datum als solches ist immer als Binär-Wert gespeichert. Beim Einlesen in RPG wird dieses Datum in ein alphanumerisches (lesbares) Datum konvertiert. Dabei wird das Format aus den H-Bestimmungen herangezogen (s.o.).

    Die alphanumerische Darstellung wird unmittelbar vor dem Update/Write wieder in die Scaliger No konvertiert. Während des Programms wird jedoch die alphanumerische Darstellung verwendt. Aus diesem Grund kann auch im Debug der Binär-Wert des Datums nicht angezeigt werden.

    Datums-Formate, die in DDS beschriebenen Dateien hinterlegt wurden, werden lediglich dazu benötigt, um den Binär-Wert (Scaliger No) des Datums lesbar zu machen.

    Das Datums-Format in den H-Bestimmungen auf *EUR zu setzen ist keine gute Idee! Dies kann zu Problemen führen, wenn Datums-Werte an Funktionen und Prozeduren übergeben werden, die als Stored Procedures oder User Defined Functions (UDF) für den Aufruf aus SQL registriert werden. SQL erwartet an dieser Stelle eine alphanumerische Darstellung eines Datums im *ISO-Format!

    Ansonsten schert sich SQL nicht um das Datums-Format, d.h. es erfolgt keine Konvertierung sondern wird immer mit der Scaliger No gearbeitet. Das Datums-Format wird wirklich nur dazu verwendet, um die Scaliger No lesbar zu machen.

    Da Datums-Formate auch in RPG eigentlich nur dazu verwendet werden die binären Datums-Werte lesbar zu machen, würde ich empfehlen immer mit *ISO Datums-Format zu arbeiten.

    Für die Anzeige in Bildschirmen wird das Format eh' auf Feld-Ebene gesetzt.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •