タイトルの件、やはり便利な命令が用意されていました。 これまでは、DSで年、月、日に分けて、閏年判定を交えて、オリジナル関数で処理させていましたが、TEST命令を使えば簡単に判定できることがわかりました。
サンプルはこちらです。
サンプルPGM
D MAIN PR EXTPGM('SAMPLE37') D 8P 0 D MAIN PI D P@YYMD 8P 0 D* /FREE DSPLY P@YYMD; // 8桁日付 TEST(DE) *ISO P@YYMD; IF %ERROR(); DSPLY ' パラメータ日付NG! '; ELSE; DSPLY ' パラメータ日付OK! '; ENDIF; // 6桁日付 TEST(DE) *YMD P@YYMD; IF %ERROR(); DSPLY ' パラメータ日付NG! '; ELSE; DSPLY ' パラメータ日付OK! '; ENDIF; *INLR = *ON; RETURN; /END-FREE
実行結果
> CALL PGM(TIGEROBJ/SAMPLE37) PARM(X'000150228F') DSPLY 150228 DSPLY パラメータ日付OK! DSPLY パラメータ日付OK! > CALL PGM(TIGEROBJ/SAMPLE37) PARM(X'020150229F') DSPLY 20150229 DSPLY パラメータ日付NG! DSPLY パラメータ日付NG! > CALL PGM(TIGEROBJ/SAMPLE37) PARM(X'000160229F') DSPLY 160229 DSPLY パラメータ日付OK! DSPLY パラメータ日付OK!