RPGも、BIF(Built-In Functions 組込み関数)を使うことで、シンプルにコーディングできるようになっています。
今回は、%DIFFを使って、日数差と時間差を算出するサンプルを作ってみました。
RPGLE (SAMPLE25)
D************************************************************************** D* VARIABLE DEFINITION D************************************************************************** D W@DATE1 S 8S 0 INZ(20141201) D W@DATE2 S 8S 0 INZ(20150115) D W@TIME1 S 6S 0 INZ(085959) D W@TIME2 S 6S 0 INZ(090000) D W@TIMESTAMP S Z D W@DIFF S 6S 0 D* C************************************************************************** C* MAIN C************************************************************************** /FREE // DATE1 と DATE2 の日数差を求める W@DIFF = %DIFF(%DATE(W@DATE2:*ISO):%DATE(W@DATE1:*ISO):*DAYS); DSPLY W@DIFF; // TIME1 と TIME2 の時間差(秒)を求める W@DIFF = %DIFF(%TIME(W@TIME2:*HMS):%TIME(W@TIME1:*HMS):*SECONDS); DSPLY W@DIFF; // 2014/12/25 18:30 と現在時刻 の時間差(秒)を求める W@TIMESTAMP = %TIMESTAMP('2014-12-25-18.30.00.000000'); W@DIFF = %DIFF(%TIMESTAMP():W@TIMESTAMP:*SECONDS); DSPLY W@DIFF; *INLR = *ON; RETURN; /END-FREE
実行結果
> CALL SAMPLE25 DSPLY 45 DSPLY 1 DSPLY 6459
- 今回は、結果オプションとして、DAYS(日数)とSECONDS(秒)を使用しましたが、MONTHS(月数), YEARS(年), MINUTES(分), HOURS(時)も使用可能です。