RPGLEで日付、時間の各値(年や時間など)を取得する方法です。
それにしても、BIF関数は便利ですね。
昔は、TIME命令で得た14桁の数値から日時情報を取得していましたから。
C TIME W@TIME 14 0
今回のサンプルはこちら。
サンプルPGM
D YEAR S 4S 0 // YEAR D MON S 2S 0 // MONTH D DAY S 2S 0 // DAY D HOUR S 2S 0 // HOUR D MIN S 2S 0 // MINUTE D SEC S 2S 0 // SECOND D MES S 20 // MESSAGE /FREE // 現在日時取得 YEAR = %SUBDT(%DATE():*YEARS); MON = %SUBDT(%DATE():*MONTHS); DAY = %SUBDT(%DATE():*DAYS); HOUR = %SUBDT(%TIME():*HOURS); MIN = %SUBDT(%TIME():*MINUTES); SEC = %SUBDT(%TIME():*SECONDS); // メッセージ出力 MES = %CHAR(YEAR) + '-' + %EDITC(MON:'X') + '-' + %EDITC(DAY:'X'); DSPLY MES; MES = %EDITC(HOUR:'X') + ':' + %EDITC(MIN:'X') + ':' + %EDITC(SEC:'X'); DSPLY MES; *INLR = *ON; RETURN; /END-FREE
実行結果
> CALL PGM(TIGEROBJ/SAMPLE42) DSPLY 2021-07-31 DSPLY 18:08:17
なお、7月など1桁の数値をゼロ詰めしたい場合は、%EDITCを使いましょう。
これで、日時情報を使った制御処理も自由自在になりますね。
オッケーでございまーす!!