時間の差を計算します。
<< CLP CALTIMDIFC >>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
PGM PARM(&FROMDATE &FROMTIME &TODATE &TOTIME &SECONDS) DCL VAR(&FROMDATE) TYPE(*CHAR) LEN(6) DCL VAR(&FROMTIME) TYPE(*CHAR) LEN(6) DCL VAR(&TODATE) TYPE(*CHAR) LEN(6) DCL VAR(&TOTIME) TYPE(*CHAR) LEN(6) DCL VAR(&SECONDS) TYPE(*CHAR) LEN(7) DCL VAR(&TIME) TYPE(*DEC) LEN(7 0) DCL VAR(&HOURA) TYPE(*CHAR) LEN(2) DCL VAR(&HOUR) TYPE(*DEC) LEN(2 0) DCL VAR(&MINA) TYPE(*CHAR) LEN(2) DCL VAR(&MIN) TYPE(*DEC) LEN(2 0) DCL VAR(&SECA) TYPE(*CHAR) LEN(2) DCL VAR(&SEC) TYPE(*DEC) LEN(2 0) DCL VAR(&WORK1) TYPE(*DEC) LEN(7 0) DCL VAR(&WORK2) TYPE(*DEC) LEN(7 0) DCL VAR(&WORK3) TYPE(*DEC) LEN(7 0) DCL VAR(&TIMEADD) TYPE(*DEC) LEN(7 0) DCL VAR(&TIMESUB) TYPE(*DEC) LEN(7 0) DCL VAR(&DAYS) TYPE(*DEC) LEN(7 0) DCL &ERRORSW *LGL /*標準エラー */ DCL &MSGID *CHAR LEN(7) /*標準エラー */ DCL &MSGDTA *CHAR LEN(100) /*標準エラー */ DCL &MSGF *CHAR LEN(10) /*標準エラー */ DCL &MSGFLIB *CHAR LEN(10) /*標準エラー */ MONMSG MSGID(CPF0000) EXEC(GOTO STDERR1) /*標準エラー */ CALDATDIF FROMDATE(&FROMDATE) TODATE(&TODATE) + NBROFDAYS(&DAYS) CHGVAR VAR(&HOURA) VALUE(%SST(&TOTIME 1 2)) CHGVAR VAR(&MINA) VALUE(%SST(&TOTIME 3 2)) CHGVAR VAR(&SECA) VALUE(%SST(&TOTIME 5 2)) CHGVAR VAR(&HOUR) VALUE(&HOURA) CHGVAR VAR(&MIN) VALUE(&MINA) CHGVAR VAR(&SEC) VALUE(&SECA) CHGVAR VAR(&WORK3) VALUE(&DAYS * 24) CHGVAR VAR(&HOUR) VALUE(&HOUR + &WORK3) CHGVAR VAR(&WORK1) VALUE(&HOUR * 3600) CHGVAR VAR(&WORK2) VALUE(&MIN * 60) CHGVAR VAR(&TIMEADD) VALUE(&WORK1 + &WORK2 + &SEC) CHGVAR VAR(&HOURA) VALUE(%SST(&FROMTIME 1 2)) CHGVAR VAR(&MINA) VALUE(%SST(&FROMTIME 3 2)) CHGVAR VAR(&SECA) VALUE(%SST(&FROMTIME 5 2)) CHGVAR VAR(&HOUR) VALUE(&HOURA) CHGVAR VAR(&MIN) VALUE(&MINA) CHGVAR VAR(&SEC) VALUE(&SECA) CHGVAR VAR(&WORK1) VALUE(&HOUR * 3600) CHGVAR VAR(&WORK2) VALUE(&MIN * 60) CHGVAR VAR(&TIMESUB) VALUE(&WORK1 + &WORK2 + &SEC) CHGVAR VAR(&TIME) VALUE(&TIMEADD - &TIMESUB) CHGVAR VAR(&SECONDS) VALUE(&TIME) RETURN /*プログラムの正常終了 */ STDERR1: /*標準エラー処理ルーチン */ IF &ERRORSW SNDPGMMSG MSGID(CPF9999) + MSGF(QCPFMSG) MSGTYPE(*ESCAPE) /*機能エラー*/ CHGVAR &ERRORSW '1' /*エラー・フラグのセット */ STDERR2: RCVMSG MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&MSGID) + MSGF(&MSGF) MSGFLIB(&MSGFLIB) IF (&MSGID *EQ ' ') GOTO STDERR3 SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + MSGDTA(&MSGDTA) MSGTYPE(*DIAG) GOTO STDERR2 /*別のエラーをチェックのため戻る */ STDERR3: RCVMSG MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) + MSGF(&MSGF) MSGFLIB(&MSGFLIB) SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) + MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE) ENDPGM |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
CRTCMD CMD(xxxxx/CALTIMDIF) PGM(xxxxx/CALTIMDIFC) ALLOW(*BPGM *IPGM) CMD PROMPT('時間の差計算') PARM KWD(FROMDATE) TYPE(*CHAR) LEN(6) + RANGE(000001 999999) + SPCVAL((*TODAY)) + PROMPT('始点日付 (6)') PARM KWD(FROMTIME) TYPE(*CHAR) LEN(6) MIN(1) + RANGE(000000 240000) + PROMPT('始点時刻 (6)') PARM KWD(TODATE) TYPE(*CHAR) LEN(6) + RANGE(000001 999999) + SPCVAL((*TODAY)) + PROMPT('終点日付 (6)') PARM KWD(TOTIME) TYPE(*CHAR ) LEN(6) MIN(1) + RANGE(000000 240000) + PROMPT('終点時刻 (6)') PARM KWD(SECONDS) TYPE(*CHAR) LEN(7) MIN(1) + RTNVAL(*YES) + PROMPT('時間の差(秒) (7)') |