[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Aug 2012
    Beiträge
    18

    Datum "umdrehen"

    Hallo liebes Forum,

    ich habe folgendes Problem:
    In der P Datei in der ich in meinem Quellcode drauf zugreife, steht das Datum im Format yyyymmdd, möchte es aber im Format ddmmyyyy ausgedruckt haben.

    Also das Datum ist nichts vom System aus, sondern Manuell in dem Format yyyymmdd eingegeben worden.
    Auf dieses numeric Feld greife ich zu, möchte es aber halt bevor ich es ausdrucke in das Format ddmmyyyy haben

    Hat jemand eine konkrete Idee, wie man das bewerkstelligen könnte ?

    LG

  2. #2
    Registriert seit
    Aug 2006
    Beiträge
    2.114
    Zitat Zitat von Jokersams Beitrag anzeigen
    Hallo liebes Forum,

    ich habe folgendes Problem:
    In der P Datei in der ich in meinem Quellcode drauf zugreife, steht das Datum im Format yyyymmdd, möchte es aber im Format ddmmyyyy ausgedruckt haben.

    Hat jemand eine konkrete Idee, wie man das bewerkstelligen könnte ?

    LG
    Was wollen mir diese Worte sagen?

    Was ist bei Dir Quellcode?

    Am einfachsten kann man sowas mit SQL machen substr(digits Einfach mal im Forum nach suchen, ist oft behandelt worden

    GG

  3. #3
    Registriert seit
    Aug 2012
    Beiträge
    18
    Ein einfaches Programm, welches eine Druckausgabe anhand der Daten einer P Datei erzeugen soll.

    In dieser physical File stehen halt auch Daten drin, welches ein manuell eingegebenes Datum im Format yyyymmdd enthalten.

    Ich rufe dieses Programm auf und im Spool wird mir das Datum dann natürlich auch in yyyymmdd ausgegeben.

    Nun möchte ich im Programm selber sagen, dass bevor er diesen Satz drucken soll, zuerst das Datum irgendwie auf ddmmyyyy umstellen soll

    Wär primär nur der schönheit halber

    Danke für die Antoworten

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Wie willst Du es denn andrucken, mit oder ohne Trennzeichen?
    Ist das Feld alpha oder numerisch?

    Code:
    /Free 
       MyCharDate = %Char(%Date(NumDate: *ISO): *EUR); //TT.MM.JJJJ
       MyNumDate = %Dec(%Date(NumDate: *ISO): *EUR); //TTMMJJJJ
    /End-Free
    MyCharDate ist 10A
    MyNumDate ist 8,0

    Birgitta
    Birgitta Hauser

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

  5. #5
    Registriert seit
    Aug 2012
    Beiträge
    18
    Danke Birgitta.
    Das Feld ist numerisch, und trennen wollte ich es per EDTCDE in der printerfile.

    Probiere es jetzt mal aus

  6. #6
    Registriert seit
    Aug 2012
    Beiträge
    18
    Ich habe es jetzt mal so reingeschrieben:

    ZZDATE = %dec(%Date(SKBDAT: *ISO): *EUR);

    ZZDATE ist intern mit 8S 0 deklariert
    SKBDAT ist das Feld in der physical file, welches die Zahlen enthält.

    Fehler beim programmabruf:
    Darums-, Zeit- oder Zeitmarkenwert ist ungültig.

    Kann es sein, das dies nicht funktionieren kann, weil SKBDAT ein beliebiges 8S 0 num Feld ist, wo einfach Daten wie "20121011" per upddta reingeschrieben worden ?

  7. #7
    Registriert seit
    Apr 2005
    Beiträge
    385
    Also man kann das auch anders machen

    D DAT1 S D DATFMT(*ISO)
    D DAT2 S D DATFMT(*EUR)

    MOVEL SKBDAT DAT1
    MOVEL DAT1 DAT2
    MOVE DAT2 ZZDATE

    Wichitg ist dafür nur das in SKBDAT gültige Werte enthält also 0 oder 20120231 wird nicht funktionieren?

    Desweiteren würde ich dir empfehlen, das ZZDATE nicht num. zu definieren sondern 10A und dann DAT2 über die Funktion %CHAR.

    Ganz billige Alternative über Datenstrukturen. Geht immer

  8. #8
    Registriert seit
    Aug 2012
    Beiträge
    18
    Das sieht schonmal gut aus, danke.

    Aber du sagst das Werte wie "0" oder "20121011" nicht funktionieren würden ?

    Das Problem ist ja, das SKBDAT genau diese Werte enthält

    Also in SKBDAT stehen halt die Daten im Format 20121011, welche ich gerne in 11102012 hätte....

  9. #9
    Registriert seit
    Jan 2007
    Beiträge
    1.002
    Versuchs mal so ...
    Nimm Brigitta's Beispiel


    Code:
    /Free 
       MyCharDate = %Char(%Date(NumDate: *YYMD): *EUR); //TT.MM.JJJJ
       MyNumDate = %Dec(%Date(NumDate: *YYMD): *EUR); //TTMMJJJJ
    /End-Free
    Anstelle der *ISO Definition schreibst Du *YYMD rein.
    kf

  10. #10
    Registriert seit
    Aug 2012
    Beiträge
    18
    Was soll das YYMD denn genau bewirken ?
    Bekomm jedenfalls hier die Meldung, dass das Token ungültig ist und ein Operand erwartet, aber nicht gefunden wurde...

    RPG ist schon anstrengend :>

    Danke für die Antworten

  11. #11
    Registriert seit
    Jan 2007
    Beiträge
    1.002
    Sorry, vergiss das obige posting - *yymd betrifft CL.

    Definiere ein Feld z.b. D
    D datum s d datfmt(*iso)

    Move dein Datum in dieses Feld und verwende Birgittas Beispiel. Das sollte so funktionieren. Bei mir tut es jedenfalls.
    kf

  12. #12
    Registriert seit
    May 2002
    Beiträge
    1.121
    Nimm die Variante von ExAzubi und packe ein IF darum

    If SKBDAT > *Zeros
    MOVEL SKBDAT DAT1
    MOVEL DAT1 DAT2
    MOVE DAT2 ZZDATE
    Else
    Eval ZZDATE =*Zeros
    EndIf

Similar Threads

  1. SQL: Aus mehreren Feldern ein Datum erkennen
    By I0N in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 21-11-06, 12:44
  2. SQL DATUM
    By steven_r in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 20-11-06, 18:37
  3. Datum in Query
    By heini in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 30-09-06, 10:10
  4. Datum überlebt ODBC Transfer auf Excel nicht
    By jjagi in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 07-07-06, 08:29
  5. Datum sicher in *EUR wandeln
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 27-04-06, 12:45

Berechtigungen

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