RPG

267. UDATE の厳密な注意

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 と思ってきたが厳密にはそうではなかった。