タイトルの件、やはり便利な命令が用意されていました。 これまでは、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!