RPG プログラムの中でデータ・レコードに更新日付を書き込みたいときに
あなたはどのように記述しますか ?
ああ、それなら簡単 !!
C Z-ADD UDATE CHGDATE
なんかでいいんでしょ?
というのは実は厳密な意味では間違い。
UDATE というのは Usual Date ということで今日の日付と思いきや、
実は「このジョブが開始された日付」である。
「だから同じことではないか ?!」というのも厳密には間違い。
今の時代、IBM i の電源は 365日 ON で入れっぱなし、というのも珍しくない。
このジョブが常時、待機して実行しているとか、あるいは
5250 エミュレータを上げっぱなしの場合、翌日になっても
実は UDATE は更新されない。
5250 環境では翌日になっても UDATE は昨日の日付のままである。
従って UDATE を更新しても正しい更新日付が書き込まれているとは限らない。
書き込まれているのはジョブが開始された日付である。
それでは常に正しい今日の日付を RPG でどのように取得すべきかというと、
D*( プログラム状況データ構造 )
D INFDS_THIS SDS
:
D JOB_DATE 270 275S 0
D RUN_DATE 276 281S 0
このうちの RUN_DATE が正しく更新されている今日の日付である。
JOB_DATE はやはり UDATE と同じでジョブが開始された日付である。
従って
C MOVE RUN_DATE CHGDATE
とするのが正しい日付の更新の方法である。
...今まで今日の日付は UDATE と思ってきたが厳密にはそうではなかった。
