[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2005
    Beiträge
    3

    CHAR in Zoned umsetzen RPG

    Hallo,

    ich habe ein Datum mit %Subst zusammengesetzt und muss es nun in ein Feld (8S 0) bringen. Wie konvertiere ich es??? Bin über jeden Tip dankbar.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Tja, leider etwas vernachlässigt, aber so gehts:

    mynum = %subdt(mydate:*Y) * 10000 + %subdt(mydate:*M) * 100 + %subdt(mydate:*D);
    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
    Oct 2003
    Beiträge
    192
    *DMY MOVE Datumsfeld NumerischFeld


    Statt *DMY einfach dein Datumsformat

    *DMY
    *YMD
    *ISO
    *EUR

    etc.

    angeben.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    VORSICHT bei MOVE !
    DATEDIT muss in den H-Bestimmungen gesetzt sein um ein Datum korrekt zu übersetzen.
    Ggf. kommt es zu Fehlern wenn das Datum < 1.1.1940 bzw. > 31.12.2039 ist und das Zieldatum ist dann ggf. nur 6-stellig.
    Da ist es mit den Extract-Funktionen %subdt auf jeden Fall sicherer.
    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

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zitat Zitat von Wissbegierig
    Hallo,

    ich habe ein Datum mit %Subst zusammengesetzt und muss es nun in ein Feld (8S 0) bringen. Wie konvertiere ich es??? Bin über jeden Tip dankbar.
    Hallo,

    zunächst einmal eine Frage, wie sieht das zusammengepuzzelte Datum aus?

    'JJJJ-MM-DD' oder JJJMMDD oder ....

    Abhängig vom Format kann das Datum in ein numerisches Feld konvertiert werden. Die eine Variante sind 2 aufeinanderfolgende MOVE-Befehle, wobei beim ersten MOVE das alphanumerische Feld in ein echtes Datum konvertiert wird.
    Beim 2. MOVE wird das Datum in ein numerisches Feld konvertiert. In Faktor 1 wird zunächst das Format des alphanumerischen Feldes (1.MOVE) angegeben. Beim 2. MOVE wird in Faktor2 das Ausgabe-Format in das numerische Feld angegeben. Datums-Werte sind immer als 4Byte Binär-Wert gespeichert und werden nur in RPG konvertiert. Für Berechnungen wird jedoch immer der Binär-Wert herangezogen.

    Ansonsten hat man die Möglichkeit mehrere Built-in-Funktionen ineinander zu schachteln. Ab Release V5R3M0 können Datums-Werte direkt über die Funktion %DEC in numerische Felder konvertiert werden.

    Anbei einige Beispiele:
    PHP-Code:
    D MyDate          S               D                     
    D MyDate10A       S             10A   inz
    ('2005-11-29'
    D MyDate8A        S              8A   inz('29112005')   
    D MyDate6A        S              6A   inz('112905')     
                                                            
    D MyDate8N        S              8S 0                   
     
    *--------------------------------------------------------
    C                   Move      MyDate10A     MyDate      
    C                   Move      MyDate        MyDate8N    
    C     MyDate8N      Dsply                               
                                                            
    C                   clear                   MyDate8N    
    C     
    *Eur0         Move      MyDate8A      MyDate      
    C                   Move      MyDate        MyDate8N    
    C     MyDate8N      Dsply                               
                                                            
    C                   clear                   MyDate8N    
    C                   movel     
    '29-11-05'    MyDate8A    
    C     
    *DMY-         Move      MyDate8A      MyDate      
    C                   Move      MyDate        MyDate8N    
    C     MyDate8N      Dsply                               
                                                            
    C                   clear                   MyDate8N    
    C     
    *MDY0         Move      MyDate6A      MyDate      
    C                   Move      MyDate        MyDate8N    
    C     MyDate8N      Dsply                     
     
    *--------------------------------------------------------  
     /
    Free                                          
     
    /If DEFINED (*V5R3M0)                          
       
    Clear MyDate8N;                              
       
    MyDate8N = %Dec(%Date(MyDate10A: *ISO));     
       
    Dsply MyDate8N;                              
                                                    
       
    Clear MyDate8N;                              
       
    MyDate8A '29112005';                       
       
    MyDate8N = %Dec(%Date(MyDate8A: *Eur0));     
       
    Dsply MyDate8N;                              
                                                    
       
    Clear MyDate8N;                              
       
    MyDate8A '29-11-05';                       
       
    MyDate8N = %Dec(%Date(MyDate8A: *DMY-));     
       
    Dsply MyDate8N;                              
                                                    
       
    Clear MyDate8N;                              
       
    MyDate8N = %Dec(%Date(MyDate6A: *MDY0));     
       
    Dsply MyDate8N;                 
       
    //-------------------------------------------------------             
     
    /ELSE                                                            
       
    Clear MyDate8N;                                                
       
    MyDate8N = %Dec(%Char(%Date(MyDate10A: *ISO): *ISO0): 80);   
       
    Dsply MyDate8N;                                                
                                                                      
       
    Clear MyDate8N;                                                
       
    MyDate8A '29112005';                                         
       
    MyDate8N = %Dec(%Char(%Date(MyDate8A: *Eur0): *ISO0): 80);   
       
    Dsply MyDate8N;                                                
                                                                      
       
    Clear MyDate8N;                                                
       
    MyDate8A '29-11-05';                                         
       
    MyDate8N = %Dec(%Char(%Date(MyDate8A: *DMY-): *ISO0): 80);   
       
    Dsply MyDate8N;                                                
                                                                      
       
    Clear MyDate8N;                                                
       
    MyDate8N = %Dec(%Char(%Date(MyDate6A: *MDY0): *ISO0): 80);   
       
    Dsply MyDate8N;  
     /EndIf     
       *
    InLR = *ON;                                                      
     /
    End-Free 
    Nähere Informationen zur Datums- und Zeitrechnung findest Du u.a. in folgendem Redbook Kapitel 9.3:
    Modernizing IBM eServer iSeries Application Data Access - A Roadmap Cornerstone
    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

Similar Threads

  1. Rückgabewert vom RPG Programm
    By mk in forum NEWSboard Java
    Antworten: 8
    Letzter Beitrag: 21-04-11, 21:51
  2. RPG: Client Infos lesen?
    By robertki in forum NEWSboard Programmierung
    Antworten: 25
    Letzter Beitrag: 19-01-07, 08:42
  3. Bibliotheksliste in RPG IV abfragen
    By timeless in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 11-01-07, 12:04
  4. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  5. RPG goes Web
    By jth in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 21-12-06, 11:13

Berechtigungen

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