如何於 CL 中取得指定日期為星期幾 ?
FILE : QCLSRC
Member:DayOfWeeKC
Type: CLLE
             PGM    (&Date)
             DCL    &Date         *Char  10
             DCL    &LDateB       *Char   4    /* Binary */
             DCL    &LDateN       *Dec   15 0  /* Decimal*/
             DCL    &DAYARRAY     *CHAR  63 +
                          ('Sunday   Monday   Tuesday  +
                          WednesdayThursday Friday   Saturday ')
             DCL    &IndexB       *Char   4    /* Binary */
             DCL    &IndexN       *Dec   15 0  /* Decimal*/
             DCL    &Start        *Dec   15 0  /* Decimal*/
             DCL    &DayOfWeek    *Char   9
             DCL    &Msg          *Char 100
             DCL     &msgid   *CHAR 7
             DCL     &msgf    *CHAR 10
             DCL     &msgflib *CHAR 10
             DCL     &msgdta  *CHAR 100
             MONMSG     CEE0000  EXEC(GOTO ERROR)
             MONMSG     CPF0000  EXEC(GOTO ERROR)
             CALLPRC 'CEEDAYS' (&Date        +
                                'MM/DD/YYYY' +
                                &LDateB      +
                                *OMIT)
     /* Convert to Dayofweek */
     /* For the day of week, 1 indicates Sunday, 2 indicates Monday, */
     /* 7 indicates Saturday.                                        */
             CALLPRC 'CEEDYWK' (&LDateB +
                                &IndexB +
                                *OMIT)
             CHGVAR &IndexN    %BIN(&IndexB)
             CHGVAR &Start     (&IndexN * 9 - 8)
             CHGVAR &DayOfWeek %SST(&DayArray &Start 9)
             SNDPGMMSG  MSG(&DATE |> 'Falls on' |> &DAYOFWEEK |< +
                          '.') TOPGMQ(*PRV *PGMBDY)
             Return
/*==================================================================*/
/* Error processing routine                                         */
/*==================================================================*/
ERROR:       RCVMSG     MSGTYPE(*LAST)               +
                        MSGDTA(&msgdta)              +
                        MSGID(&msgid)                +
                        MSGF(&msgf)                  +
                        SNDMSGFLIB(&msgflib)
          /* Prevent loop, just in case           */
             MONMSG     CPF0000
             SNDPGMMSG  MSGID(&msgid)                +
                        MSGF(&msgflib/&msgf)         +
                        MSGDTA(&msgdta)              +
                        MSGTYPE(*ESCAPE)
          /* Prevent loop, just in case           */
             MONMSG     CPF0000
             ENDPGM
      
使用說明
1. CRTBNDCL (DayofWeekc) DFTACTGRP(*NO)
2. 使用方法:
 CALL DayOfWeekC '04/09/2001' 
 
A blog about IBM i (AS/400), MQ and other things developers or Admins need to know.
星期二, 10月 31, 2023
2001-04-10 如何於 CL 中取得指定日期為星期幾 ?
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言