ID #1229

時間の差計算

時間の差を計算します。

 
<< CLP CALTIMDIFC >>

             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

<< CMD CALTIMDIF >>

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)')


タグ: -

関連エントリー: -

最終更新: 2017-05-17 10:24
製作者:
改訂: 1.1

Digg it! Share on Facebook このレコードを印刷する 友達に教える PDF ファイルで表示する
Propose a translation for Propose a translation for
この FAQ を評価してください:

評価点数: 0 (0 件の投票)

完全に役に立たない 1 2 3 4 5 最も価値がある

このエントリーにコメントできません。