RPG

276. %DATE は要注意 !!

先の「275. RPGで曜日を算出するには ?」における注意点をもう少し。
ご存知のように日本国内でタイプ D として日付を指定している例は少ない。
そして日付形式は多くが *YMD 形式である。
これに対して米国では基本的に *MDY であり英国や香港は *DMY 形式である。

さて IBM 解説書にある %DATE の説明では

日付 = %DATE([変換元の文字列] : [日付フォーマット] )

とある。
日付フォーマット(様式)とは *YMD, *MDY, *DMY のいずれかの様式であるはずである。
ところが このうち *YMD を指定すると
「日付,時刻,またはタイム・スタンプの値が正しくない 」
とのエラーになってしまって %DATE による日付変換は失敗する。

例えば

DATE = %DATE('170401': *YMD);

はエラーとなってしまう。
恐らく *DMY もエラーとなるだろう。
しかし

DATE = %DATE('040117': *MDY);

であれば正常に変換される。
数字や文字から 10桁 の日付形式に %DATE で変換するときは *YMD を指定しても
エラーとなってしまう。
恐らく IBM は *YMD に関してテストしていないのだろう。
面倒であるが *MDY を指定して変換するようにして欲しい。