タイガー!タイガー!じれったいぞー!(SE編)

AS400, Java, JavaEE, JSF等の開発、習慣など。日々の気づきをまとめたブログ(備忘録)

【AS400】RPGLE-日付差、時間差を求める

RPGも、BIF(Built-In Functions 組込み関数)を使うことで、シンプルにコーディングできるようになっています。

今回は、%DIFFを使って、日数差と時間差を算出するサンプルを作ってみました。

RPGLE (SAMPLE25)

     D**************************************************************************
     D* VARIABLE  DEFINITION                               
     D**************************************************************************
     D W@DATE1         S              8S 0 INZ(20141201) 
     D W@DATE2         S              8S 0 INZ(20150115)
     D W@TIME1         S              6S 0 INZ(085959)  
     D W@TIME2         S              6S 0 INZ(090000)  
     D W@TIMESTAMP     S               Z              
     D W@DIFF          S              6S 0              
     D*                                               
     C**************************************************************************
     C* MAIN                                                        
     C**************************************************************************
      /FREE                                                 
         // DATE1 と DATE2 の日数差を求める                
          W@DIFF = %DIFF(%DATE(W@DATE2:*ISO):%DATE(W@DATE1:*ISO):*DAYS);
          DSPLY W@DIFF;                                
                                                       
         // TIME1 と TIME2 の時間差(秒)を求める 
          W@DIFF = %DIFF(%TIME(W@TIME2:*HMS):%TIME(W@TIME1:*HMS):*SECONDS);
          DSPLY W@DIFF;                     
                                              
         // 2014/12/25 18:30 と現在時刻 の時間差(秒)を求める
          W@TIMESTAMP = %TIMESTAMP('2014-12-25-18.30.00.000000');
          W@DIFF = %DIFF(%TIMESTAMP():W@TIMESTAMP:*SECONDS);
          DSPLY W@DIFF;  
                           
          *INLR = *ON; 
          RETURN;
      /END-FREE

実行結果

> CALL SAMPLE25                                             
DSPLY      45 
DSPLY       1 
DSPLY    6459 


  • 今回は、結果オプションとして、DAYS(日数)とSECONDS(秒)を使用しましたが、MONTHS(月数), YEARS(年), MINUTES(分), HOURS(時)も使用可能です。