RPG

221. 8桁の UDATE を表示するには

DSPF の右上端などに今日の日付( UDATE ) を表示するケースはよくある。

 A                                  4 22DATE EDTCDE(Y)

のように DDS で DATE キー・ワードを使うと今日の日付( UDATE ) が画面に表示されることは
良く知られている。
しかし 「14/12/25」のように西暦の 20 を省略する表示は 2000 年問題以降は
( 2000年問題が知らない人は先輩に訪ねてください。)
西暦表示も「2014/12/25」のように省略しないで表示することが一般的である。
そこで 8 桁の今日の日付を表示する方法をここで紹介する。

A                                  6 22DATE(*YY) EDTCDE(W)

のように DATE キー・ワードの拡張パラメータとして *YY を指定すると 8 桁の日付として
表示される。
ただし 8 桁日付の編集コードは Y ではなく、 W を使用すること。

【 サンプル・ソース:TESTDATEFM 】
0001.00      A*%%TS  SD  19940302  221529  QTR         REL-V2R2M0  5738-PW1     
0002.00      A*            11:59:33    QSECOFR     REL-R06M00  5714-UT1         
0003.00      A*%%EC                                                             
0004.00      A                                      DSPSIZ(24 80 *DS3)          
0005.00      A                                      MSGLOC(24)                  
0006.00      A                                      PRINT                       
0007.00      A          R DSPDTA01                                              
0008.00      A*%%TS  SD  19940302  221529  QTR         REL-V2R2M0  5738-PW1     
0009.00      A                                      TEXT(' 明細画面 01')        
0010.00      A                                      CF03(03 ' 終了 ')           
0011.00      A                                      SETOF(99)                   
0012.00      A                                      KEEP                        
0013.00      A                                      BLINK                       
0014.00      A                                  1 27' 日付フィールドのテスト '  
0015.00      A                                      DSPATR(RI)                  
0016.00      A                                  4  2' 6桁の日付 (DATE)'        
0017.00      A                                  4 22DATE EDTCDE(Y)              
0018.00      A                                  4 34'( EDTCDE(Y) )'             
0019.00      A                                  6  2' 8桁の日付 (DATE)'        
0020.00      A                                  6 22DATE(*YY) EDTCDE(W)         
0021.00      A                                  6 34'( EDTCDE(W) )'
0022.00      A                                 23  2'F3= 終了 '    
【サンプル実行CLP: TESTDATECL】
001.00              PGM                                                  
002.00 /*---------------------------------------------------------*/     
003.00 /*   TESTDATECL :   日付フィールドのテスト                 */     
004.00 /*---------------------------------------------------------*/     
005.00              DCLF       FILE(TEST.COM/TESTDATEFM)                 
006.00              DCL        VAR(&UDATE) TYPE(*CHAR) LEN(10)           
007.00                                                                   
008.00  DSPLY:      SNDRCVF    RCDFMT(DSPDTA01)                          
009.00              IF         COND(&IN03 *EQ '1') THEN(RETURN)          
010.00              GOTO       DSPLY                                     
011.00                                                                   
012.00              ENDPGM                                               
【実行結果】

TESTLINS