星期三, 11月 01, 2023

2001-12-31 如何於 CL 中作日期運算?


2001-12-31 如何於 CL 中作日期運算?

CL 中並不提供日期運算函式,但可透過 CVTDAT 指令作日期格式轉換,
以下範例將 Job Date 轉換成 Julian number( 4 位年 + 3 位數字(1-366)),
加1,並將之轉換為日期,如果這是今年最後一天,日期無法轉換,請用次年的第一天。
            

File   : QCLSRC
Member : CLDATEC
Type   : CLP
          

PGM
   DCL  VAR(&TODAY)     TYPE(*CHAR) LEN(6)                  
   DCL  VAR(&TOMORROW)  TYPE(*CHAR) LEN(6)                  
   DCL  VAR(&WORKDATE)  TYPE(*CHAR) LEN(7)                  
   DCL  VAR(&YEAR)      TYPE(*DEC)  LEN(4)                  
   DCL  VAR(&DAY)       TYPE(*DEC)  LEN(3)                  
                                                            
   RTVJOBA    DATE(&TODAY)                                  
   CVTDAT     DATE(&TODAY) TOVAR(&WORKDATE) FROMFMT(*JOB) + 
                TOFMT(*LONGJUL) TOSEP(*NONE)                
 /* Find tomorrow's date */                                 
   CHGVAR  &DAY                 %SST(&WORKDATE 5 3)         
   CHGVAR  &DAY                (&DAY + 1)                   
   CHGVAR  %SST(&WORKDATE 5 3)  &DAY                        
   CVTDAT    DATE(&WORKDATE) TOVAR(&TOMORROW) +             
               FROMFMT(*LONGJUL) TOFMT(*JOB) TOSEP(*NONE)   
   MONMSG CPF0555 EXEC(DO)
     CHGVAR    &YEAR                %SST(&WORKDATE 1 4)      
     CHGVAR    &YEAR               (&YEAR + 1)               
     CHGVAR    %SST(&WORKDATE 1 4)  &YEAR                    
     CHGVAR    %SST(&WORKDATE 5 3)  '001'                    
     CVTDAT     DATE(&WORKDATE) TOVAR(&TOMORROW) +           
                  FROMFMT(*LONGJUL) TOFMT(*JOB) TOSEP(*NONE) 
   ENDDO                                                     
   /* Tomorrow's date is now in &TOMORROW */
 ENDPGM




沒有留言: