[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jan 2003
    Beiträge
    91

    Datum in numerisches Feld bringen in Free-RPG

    Hallo zusammen,

    habe das Problem das ich ein Datumswert (z.B. 28.10.2014) in ein 8stelliges numerisches Feld bringen muss. Das ganze in Free-RPG. Habe mit %date und %int schon alles (un)mögliche versucht. Hat jemand eine Lösung für mich?
    Uwe Bolte
    Tel.: 0171-1958266

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das ist nur mit "%dec(Date:*iso)" möglich.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ich weiß gar nicht, wofür die IBM eigentlich die schönen PDF-Handbücher rausbringt wenn da (außer mir) sowieso keiner reinschaut.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Jun 2004
    Beiträge
    17
    Wenn das Feld vom Typ Datum ist: DatumN = %dec(Datum: *iso)

    Bei Zeichenfelder: DatumN = %dec(%date(DatumZ: *EUR.): *iso)

  5. #5
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Na ja, früher haben die Pappnasen sich auch noch die Mühe gemacht die Bücher in Deutsch rauszubringen, die Kohle schenken sie sich jetzt auch schon.GG

  6. #6
    Registriert seit
    Jan 2003
    Beiträge
    746

  7. #7
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Habe ich die Aufgabenstellung falsch verstanden? Der Code %dec(Date:*iso) würde ein "normales" deutsches Datum in JJJJMMTT drehen. Wenn er das Datum weiterhin im deutschen Format TTMMJJJJ im numerischen Feld haben möchte, muss er %dec(Date:*eur) verwenden, denke ich.

  8. #8
    Registriert seit
    Jan 2003
    Beiträge
    91
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Ich weiß gar nicht, wofür die IBM eigentlich die schönen PDF-Handbücher rausbringt wenn da (außer mir) sowieso keiner reinschaut.
    Schlaumeier, hätte ich das Beispiel im Handbuch gefunden, hätte ich mich bestimmt nicht hier gemeldet. Ironie kannste behalten, den Rest nehme ich.
    Uwe Bolte
    Tel.: 0171-1958266

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ich finde die Sachen ja auch nur im Handbuch , manches probiere ich da sogar aus.

    Ansonsten kann man bei der Konvertierung eben angeben was man will:
    %dec(Datum:*iso) => JJJJMMTT
    %dec(Datum:*eur) => TTMMJJJJ
    %dec(Datum:*jul) => JJJJTTT
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Vielleicht zur Erklärung:
    Ein echtes Datum ist ein numerischer Wert (sogenannte Scaliger Nr.).
    Datums-Formate werden nur dazu verwendet, um den numerischen Wert lesbar zu machen.
    In RPG wird die Scaliger Nr. immer beim Lesen in eine alphanumerische Repräsentation des Datums konvertiert, abhängig vom Datums-Format in den D- oder H-Specs. Ist weder in den D- noch in den H-Specs ein Datums-Format vorgegeben wird das Format *ISO verwendet.
    Unmittelbar vor dem Zurückschreiben wird das alphanumerisch aufbereitete Datum wieder in die Scaliger Nr. konvertiert.
    Bei dem Format, das in der Built-in-Function %DEC angegben wird, handelt es sich immer um das Ausgabe-Format, da das eigentliche Datum lediglich die konvertierte Scaliger Nr. ist.

    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

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ja und Nein.
    Im Programmspeicher wird das Datum tatsächlich als reine Zeichenkette gespeichert.
    Dies kann man bei DS-Definitionen sehr schön sehen. Auch bei der Anzeige im Debugger weiß dieser nichts vom Typ Datum.
    Einzig beim Zugriff auf Datum/Zeit/Zeitmarken-Felder wird zusätzlicher Code auf gültige Werte ausgeführt. Erfolgt der Zugriff über die DS, also übergeordnet, kann keine Prüfung erfolgen da der Compiler nun mal nichts von Datumfeldern merkt und man kann dann sogar Schrott da reinstellen.
    Ebenso gilt dies beim Lesen/Schreiben von/nach zur Datenbank.
    Man kann sich ja schön per DSPFFD ansehen, dass mit der Pufferposition und Länge das Feld bereits aufbereitet geliefert bzw. erwartet wird.
    Die Prüfung des Formates erfolgt dann beim Schreiben. Beim Lesen ist eine Prüfung nicht erforderlich da man tatsächlich nur gültige Werte (auch bei DDS) schreiben kann.
    Beim Schreiben mit UPDATE/WRITE werden wiederum MOVE's generiert, die aus den Datenfeldern in den IO-Puffer übertragen und somit durch die Runtime geprüft werden.

    Bei SQL sieht es nur geringfügig anders aus.
    Der SQL-Precompiler generiert ja entsprechende Variablen für jede Hostvariable die mit MOVE's gelesen bzw. geschrieben werden. Hier schlägt dann die RPG-Runtime mit den Prüfungen wieder zu.
    Dies kann man dann schon mal sehen, dass z.B. beim FETCH in ein 8-stelliges Datumfeld (TT.MM.JJ) mit einem ungültigen Wert eine RPG-Fehlermeldung und kein SQL-Fehler gemeldet wird da das SQLnnnn-Feld 10-Stellig definiert wurde.

    In COBOL wird direkt mit den IO-Puffern gearbeitet. Nach einem READ kann man daher auch hier den Puffer mit den bereits aufbereiteten Datum-Feldern sehen. Außer bei den Datum-Feldern kann man daher mit COBOL auch Schrott in numerische Felder bringen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Jan 2007
    Beiträge
    905
    Zitat Zitat von ubas Beitrag anzeigen
    Habe mit %date und %int schon alles (un)mögliche versucht. Hat jemand eine Lösung für mich?
    Dr. Google hätte dir sofort eine Antwort gegeben...

    siehe z.B. hier:
    http://search400.techtarget.com/tip/...on-cheat-sheet

    (falls noch andere Formate konvertiert werden sollen)
    kf

Similar Threads

  1. Umformatierung von einem Textfeld in eine Datum Feld
    By PFR in forum NEWSboard Programmierung
    Antworten: 17
    Letzter Beitrag: 10-06-14, 08:40
  2. Drucker bringen jeden Job raus
    By bettman in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 09-12-13, 11:19
  3. Query und Feld mit TIMESTAMP oder aktuelle Uhrzeit / Datum
    By Franz.Rung in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 04-11-13, 16:54
  4. Daten von Telefon-CD auf AS400 bringen
    By Schnichels in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 14-01-05, 15:07
  5. numerisches Feld erstellen
    By heynem in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 05-12-02, 09:27

Berechtigungen

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