[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2002
    Beiträge
    29

    Question Suche Tool für Berechnung Zeitdifferenz

    Guten Abend Forum,

    ich muß die Differenz zwischen der aktuellen Systemzeit und der Zeit des Jobstarts berechnen (in Minuten).

    Gibt es irgendein Tool, mit dem man dies von einem CL-Programm aus machen kann? Idealerweise sollte natürlich die Datumsgrenze mitberücksichtigt werden.

    Ich stelle mir z.B. einen CL-Befehl vor, bei dem man die zwei Zeitpunkte (jeweils Datum und Uhrzeit) als Parameter übergibt und dann als Return-Variable die Zeitdifferenz in Minuten zurückerhält.

    Falls mir jemand einen Tip geben kann, wäre ich sehr dankbar.

    mfg.

    Stefan


  2. #2
    Registriert seit
    Dec 2000
    Beiträge
    450

    Post

    Hallo Stefan,

    schau doch mal bei den ILE CEE APIs nach. CEEDAYS und CEESECS könnten da hilfreich sein.

    Gruß
    Bruno

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.241

    Post

    Einfacher gehts mit einem ILE/RPG-Programm, 2 definierten Zeitmarken (Typ Z) und dem Befehl SUBDUR.
    Siehe hierzu auch andere Beiträge.
    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
    Jan 2002
    Beiträge
    29

    Post

    Hallo Bruno und Fuerchau,

    ich habe mir die Beschreibung von CEESECS angeschaut. Das wäre genau das, was ich brauche.

    Aber ich fürchte das funktioniert nicht in einem CL-Programm, weil als Parameter blöderweise der Datentyp Float-8 benötigt wird.

    ILERPG kommt für mich leider nicht in Frage. Mein letztes Programm habe ich in RPGIII vor 10 Jahren geschrieben. Ich habe leider kein KnowHow in ILERPG.

    Gibt es nicht schon was Fertiges?

    Trotzdem schönen Dank.

    mfg. Stefan

    [Dieser Beitrag wurde von sho1 am 04. Dezember 2002 editiert.]

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    35

    Post

    Hier ist was "fertiges" :-)

    ========== START CLP =============
    PGM

    DCL VAR(&ZEIT1) TYPE(*CHAR) LEN(6)
    DCL VAR(&ZEIT2) TYPE(*CHAR) LEN(6)
    DCL VAR(&MINUTEN) TYPE(*CHAR) LEN(9)

    RTVSYSVAL SYSVAL(QTIME) RTNVAR(&ZEIT1)

    /* VARARBEITUNG */

    RTVSYSVAL SYSVAL(QTIME) RTNVAR(&ZEIT2)

    CALL PGM(TIMEDIF) PARM(&ZEIT1 &ZEIT2 &MINUTEN)

    ENDPGM
    ========== ENDE CLP =============


    ========== START RPG "TIMEDIF" =============
    H DECEDIT('0,') TIMFMT(*HMS) DATFMT(*EUR)
    H************************************************* *******************
    D VonZeit S T TimFmt(*HMS)
    D BisZeit S T TimFmt(*HMS)
    D Minuten S 9P 0
    D VonZeitA S 6A
    D BisZeitA S 6A
    D MinutenA S 9A
    D
    D DsTime DS
    D Zeit 1 8
    D Std 1 2
    D Sep1 3 3 INZ(':')
    D Min 4 5
    D Sep2 6 6 INZ(':')
    D Sek 7 8
    C
    C *Entry PList
    C Parm VonZeitA
    C Parm BisZeitA
    C Parm MinutenA
    C
    * Prüfem ob Parameter gültig sind
    C 2 SubSt VonZeitA:1 Std
    C 2 SubSt VonZeitA:3 Min
    C 2 SubSt VonZeitA:5 Sek
    C test(T) Zeit 50
    C If *in50
    C Clear MinutenA
    C SetOn LR
    C Return
    C EndIf
    C Move Zeit VonZeit
    C
    C 2 SubSt BisZeitA:1 Std
    C 2 SubSt BisZeitA:3 Min
    C 2 SubSt BisZeitA:5 Sek
    C test(T) Zeit 50
    C If *in50
    C Clear MinutenA
    C SetOn LR
    C Return
    C EndIf
    C Move Zeit BisZeit
    C
    C
    C BisZeit SubDur VonZeit Minuten:*MN
    C Move Minuten MinutenA
    C
    C SetOn LR
    ========== ENDE RPG =============

    Hmm, kann man nicht wirklich gut lesen. Ich kann dir aber auch gerne einen SavF oder eine Textdatei zuschicken. Mail mich einfach an.

    CU
    Markus
    mail@m3s.de

    PS: Fallst du noch kein Ile-RPG Programm erstellt hast, musst du zuerst eine neue Teldatei erstellen mit der Länge 112:

    CRTSRCPF FILE(DEINELIB/QRPGLESRC) RCDLEN(112) TEXT('RPGLE-Sourcen')

    [Dieser Beitrag wurde von Booley am 04. Dezember 2002 editiert.]

  6. #6
    Registriert seit
    Jan 2002
    Beiträge
    29

    Post

    Hallo Markus,

    vielen Dank für Deine Mühe. Ich habe mich allerdings nun doch mal aufgerafft und habe mich zumindest ein bischen in ILERPG-IV "reingewurstelt".

    Es ist mir doch tatsächlich gelungen mein Problem zu lösen.

    Nochmals recht herzlichen Dank für Euere Hilfe.

    Den Code hab ich mal mit eingeblendet, vielleicht kanns nochwer auch brauchen.

    Code:
          * * * *  BEGINN DER CL-Quelle  * * * *
    
    
    /*********************************************************************/
    /*                                                                   */
    /* Prüfen, ob Abschluss-Job noch läuft.                              */
    /*                                                                   */
    /* ================================================================= */
    /*                                                                   */
    /* Quelle: RZSRC/QCLSRC                                              */
    /* Objekt: RZOBJ/CHKABSCHL  *PGM CLP                                 */
    /*                                                                   */
    /* ================================================================= */
    /*                                                                   */
    /* 03.12.2002 von Stefan Lang.                                       */
    /*                                                                   */
    /*********************************************************************/
    
                 PGM
    
    
                 DCL        &sws       *CHAR   8  /* UPSI Byte          */
    
                 DCL        &strdat    *CHAR   6  /* Startdatum         */
                 DCL        &strdatiso *CHAR  10  /* Startdatum *ISO    */
                 DCL        &strtim    *CHAR   6  /* Startzeit          */
                 DCL        &strtimiso *CHAR  15  /* Startzeit *ISO     */
                 DCL        &strstamp  *CHAR  26  /* Timestamp *ISO     */
    
                 DCL        &actdat    *CHAR   6  /* Aktuelles Datum    */
                 DCL        &actdatiso *CHAR  10  /* Aktuelles Dat.*ISO */
                 DCL        &acttim    *CHAR   6  /* Aktuelle Zeit      */
                 DCL        &acttimiso *CHAR  15  /* Aktuelle Zeit *ISO */
                 DCL        &actstamp  *CHAR  26  /* Timestamp *ISO     */
    
                 DCL        &maxtime   *DEC (5 0) /* max. erlaubte Zeit */
                                                  /* in Minuten         */
                 DCL        &duration  *DEC (5 0) /* abgelaufene Zeit   */
                                                  /* in Minuten         */
                 DCL        &rc        *CHAR   1  /* Return-Code        */
                                                  /* 0 = OK             */
                                                  /* 1 = ERROR          */
    
                 DCL        &abschl    *CHAR   1  /* ABSCHLUSS (J/N)    */
                 DCL        &periode   *CHAR   2  /* ABSCHLUSS-Periode  */
                                                  /* TG = Täglich       */
                                                  /* WO = Wöchentlich   */
    
    
    /* - - - - - Globale Fehlerfalle - - - - - - - - - - - - - - - - - - */
    
                 MONMSG     CPF0000
    
    /* - - - - - Vorgeplänkel  - - - - - - - - - - - - - - - - - - - - - */
    
                 RTVSYSVAL  SYSVAL(QDATE) RTNVAR(&strdat)
                 CVTDAT     DATE(&strdat) TOVAR(&strdatiso) +
                              FROMFMT(*SYSVAL) TOFMT(*ISO) TOSEP(*NONE)
                 RTVSYSVAL  SYSVAL(QTIME) RTNVAR(&strtim)
                 CHGVAR     &strtimiso (%SST(&strtim 1 2) *CAT '.' *CAT +
                                        %SST(&strtim 3 2) *CAT '.' *CAT +
                                        %SST(&strtim 5 2) *CAT '.' *CAT +
                                        '000000')
                 CHGVAR     &strstamp (&strdatiso *CAT '-' *CAT &strtimiso)
                 RTVDTAARA  DTAARA(ABSCHLUSS (46 2)) RTNVAR(&periode)
    
                 CHGVAR     &maxtime  60  /* Default, falls <> TG/WO     */
                 IF         (&periode *EQ 'TG') CHGVAR &maxtime  30
                 IF         (&periode *EQ 'WO') CHGVAR &maxtime 180
    
    /* - - - - - Schleife      - - - - - - - - - - - - - - - - - - - - - */
    
     LOOP:       DLYJOB     DLY(60)
    
                 RTVJOBA    SWS(&sws)  /* EOJ, wenn SWS <> X'00000000'   */
                 IF         (&sws *NE '00000000') GOTO EXIT
    
                 RTVDTAARA  DTAARA(ABSCHLUSS (1 1)) RTNVAR(&abschl)
    
                 IF         (&abschl *EQ 'N') GOTO EXIT
    
    
                 RTVSYSVAL  SYSVAL(QDATE) RTNVAR(&actdat)
                 CVTDAT     DATE(&actdat) TOVAR(&actdatiso) +
                              FROMFMT(*SYSVAL) TOFMT(*ISO) TOSEP(*NONE)
                 RTVSYSVAL  SYSVAL(QTIME) RTNVAR(&acttim)
                 CHGVAR     &acttimiso (%SST(&acttim 1 2) *CAT '.' *CAT +
                                        %SST(&acttim 3 2) *CAT '.' *CAT +
                                        %SST(&acttim 5 2) *CAT '.' *CAT +
                                        '000000')
                 CHGVAR     &actstamp (&actdatiso *CAT '-' *CAT &acttimiso)
    
                 CALL       CLCTIMDIF (&strstamp &actstamp &duration &rc)
    
                 IF         (&rc *NE '0') DO
                            SNDMSG  +
                            MSG('Achtung: Im Programm CHKABSCHL ist ein +
                                 Fehler aufgetreten. Programm wird +
                                 beendet. Details siehe Joblog.') +
                            TOUSR(*SYSOPR)
                            CHGJOB     LOG(4 00 *SECLVL) LOGCLPGM(*YES)
                            DSPJOBLOG  OUTPUT(*PRINT)
                            GOTO       EXIT
                            ENDDO
    
                 IF         (&maxtime > &duration) GOTO LOOP
    
    
    EXIT:        ENDPGM
    
    
          * * * *  BEGINN DER RPGLE-Quelle  * * * *
    
    
          *********************************************************************
          *                                                                   *
          * ----------------------------------------------------------------- *
          *                                                                   *
          * Berechnen der Zeitdifferenz (in Minuten) zwischen zwei Timestamps *
          *                                                                   *
          * ----------------------------------------------------------------- *
          *                                                                   *
          *                                                                   *
          * Programm . . . . . . . . :  CLCTIMDIF                             *
          *   Bibliothek . . . . . . :    RZOBJ                               *
          *                                                                   *
          * Quellendatei . . . . . . :  QRPGLESRC                             *
          *   Bibliothek . . . . . . :    RZSRC                               *
          * Quellenteildatei . . . . :  CLCTIMDIF                             *
          *                                                                   *
          * Autor  . . . . . . . . . :  Stefan Lang                           *
          * Erstelldatum . . . . . . :  04.12.2002                            *
          * Version  . . . . . . . . :  V4R5M0                                *
          *                                                                   *
          *                                                                   *
          * ----------------------------------------------------------------- *
          *                                                                   *
          * INPUT                                                             *
          *                                                                   *
          * FR#TimeStamp   26Z    - Von  (yyyy-mm-dd-hh.mm.ss.mmmmmm) *ISO    *
          * TO#TimeStamp   26Z    - Nach (yyyy-mm-dd-hh.mm.ss.mmmmmm) *ISO    *
          *                                                                   *
          * OUTPUT                                                            *
          *                                                                   *
          * RV#Duration     5P 0  - Dauer in Minuten                          *
          * RV#RetCde       1A    - Return-Code (0 = kein Fehler, 1 = Fehler) *
          *                                                                   *
          *                                                                   *
          *********************************************************************
          *
         HDatEdit(*DMY)
         HDatFmt(*EUR)
         HDebug(*Yes)
         HDecEdit('0,')
         HExprOpts(*MaxDigits)
         HOption(*ShowCpy : *NoDebugIO : *SrcStmt)
         HTimFmt(*HMS)
          *
         DFR#TimeStamp     S               Z
         DTO#TimeStamp     S               Z
          *
         DRV#Duration      S              5P 0
         DRV#RetCde        S              1A
          *
         C     *Entry        PList
         C                   Parm                    FR#TimeStamp
         C                   Parm                    TO#TimeStamp
         C                   Parm                    RV#Duration
         C                   Parm                    RV#RetCde
          *
         C                   Eval      RV#Duration = 0
         C                   Eval      RV#RetCde = '0'
          *
         C                   Do
          *
         C                   Test                    FR#TimeStamp           RT
         C                   Test                    TO#TimeStamp           RT
          *
         C                   If        *InRT = *On
         C                   Eval      RV#RetCde = '1'
         C                   Leave
         C                   EndIf
          *
         C     TO#TimeStamp  SubDur    FR#TimeStamp  #Dur:*MN          5 0
         C                   Z-Add     #Dur          RV#Duration
          *
         C                   EndDo
          *
         C                   Eval      *InLR = *On

Similar Threads

  1. Suche Software f. Instandhaltung
    By Dominik_Meyer in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 24-11-06, 07:06
  2. Suche IBM INFO-WINDOWS 3487.
    By takeoff/400 in forum NEWSboard Server & Hardware Markt
    Antworten: 2
    Letzter Beitrag: 31-07-06, 18:17
  3. Suche Liste Ersatzoperatoren im CL
    By kuempi von stein in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 19-07-06, 14:34
  4. Formel zur Berechnung von I-O Operationen
    By Burkhard in forum IBM i Hauptforum
    Antworten: 14
    Letzter Beitrag: 19-05-06, 17:06
  5. Suche Platten 6717
    By Peet in forum NEWSboard Server & Hardware Markt
    Antworten: 2
    Letzter Beitrag: 02-05-06, 08:08

Berechtigungen

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