Anmelden

View Full Version : Suche Tool für Berechnung Zeitdifferenz



sho1
03-12-02, 17:09
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

Bruno Jakob
04-12-02, 07:37
Hallo Stefan,

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

Gruß
Bruno

Fuerchau
04-12-02, 09:22
Einfacher gehts mit einem ILE/RPG-Programm, 2 definierten Zeitmarken (Typ Z) und dem Befehl SUBDUR.
Siehe hierzu auch andere Beiträge.

sho1
04-12-02, 10:29
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.]

Booley
04-12-02, 15:54
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.]

sho1
04-12-02, 18:55
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.




* * * * 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