| 
 | 
mancini wrote: > Does anyone have any sample code on the two following APIs. > > CEEDYWK - calculate Day of Week from Lilian Date. > > CEEDAYS - convert Date to Lilian Format. > > I need to find the day of the week for a certain date. > The attached ILE RPG source file will convert, check, return weekdays etc using CEEDYWK and CEEDAYS. You create the module and then into a service program if you wish or attach it directly to the program as a module. Have fun. -- Thank You. Regards Dave Mahadevan.. mailto:mahadevan@fuse.net
      *****************************************************************
      
**********************************************************************************************
      *   Program DATE_CHG - Insert Century in a  date, check date, return 
various forms of date
      
**********************************************************************************************
      
**********************************************************************************************
      *   Input parameters are DATE_IN and DATE_FMT, rest is all output fields
      *   DATERR=N date is less than 010101, DATE_ERR=E invalid date
     DINPUT_DATE       DS           128
     DDATE_IN                         8  0                                      
Input date
     DDATE_FMT                        4                                         
*MDY,*YMD,*ISO,*USA
     DDATE_ERR                        1                                         
N or E or Blank
     DDATE_CY                         2  0                                      
Century
     DDATE_YR                         2  0                                      
Year
     DDATE_MO                         2  0                                      
Month
     DDATE_DY                         2  0                                      
Day
     DDATE_YMD                         D   DATFMT(*YMD)                         
out date yrmody
     DDATE_ISO                         D   DATFMT(*ISO)                         
out date cyyrmody
     DDATE_MDY                         D   DATFMT(*MDY)                         
out date modyyr
     DDATE_USA                         D   DATFMT(*USA)                         
out date modycyyr
     DDATE_JUL                         D   DATFMT(*JUL)                         
out date yyddd
     DWEEK_DAY_#                      1  0                                      
Week Day #
     DWEEK_DAY                        9                                         
Week Day
     DDATE_WRD                       18                                         
Date in words
     DDATE_WMY                       15                                         
Month Year in words
      
**********************************************************************************************
     DWEEK_DAYS        S              9    DIM(7) CTDATA PERRCD(1)              
 Week Days
     DMONTH_NAME       S             12    DIM(12) CTDATA PERRCD(1)             
 Month Names
     DWORK_DATES       DS
     DCENT_DATE                       8  0                                      
Date into cyyrmody
     DDATE_TODAY                      8  0                                      
Incoming Date
     D DT1                            2  0 OVERLAY(DATE_TODAY:1)
     D DT2                            2  0 OVERLAY(DATE_TODAY:3)
     D DT3                            2  0 OVERLAY(DATE_TODAY:5)
     D DT4                            2  0 OVERLAY(DATE_TODAY:7)
     DDATE_WORK                       8  0                                      
Incoming Date
     D D1                             2  0 OVERLAY(DATE_WORK:1)
     D D2                             2  0 OVERLAY(DATE_WORK:3)
     D D3                             2  0 OVERLAY(DATE_WORK:5)
     D D4                             2  0 OVERLAY(DATE_WORK:7)
     DDATE_SAVE                       8  0                                      
Incoming Date Saved
     DDATE_6                          6  0                                      
six digit date
      ******CEE procedure 
feedback******************************************************************
     D FC              DS                  INZ
     D FC_SEV                  1      2B 0                                      
severity
     D FC_MSGNO                3      4B 0                                      
message number
     D FC_FLAGS                5      5                                         
flags
     D FC_FACID                6      8                                         
facility ID
     D FC_ISI                  9     12B 0                                      
isi
      
**********************************************************************************************
     D DATETIME        DS
     DTIME_LILI                       9B 0 INZ                                  
Lillian
     DTIME_SECS                       9B 0 INZ                                  
seconds
     DTIME_GREGO                       Z   INZ                                  
Gregorian time
     D DAY_NO                         9B 0 INZ                                  
Day number
     D DATE_S_F1       S             30                                         
Date String
     D PICT_S_F1       S             30                                         
Picture string
     D TEMP            S             30                                         
Temporary field
     C     *ENTRY        PLIST
     C                   PARM                    INPUT_DATE
      
**********************************************************************************************
     C                   CLEAR                   DATE_YMD
     C                   CLEAR                   DATE_MDY
     C                   CLEAR                   DATE_ISO
     C                   CLEAR                   DATE_USA
     C                   CLEAR                   DATE_JUL
     C                   CLEAR                   DATE_CY
     C                   CLEAR                   DATE_YR
     C                   CLEAR                   DATE_MO
     C                   CLEAR                   DATE_DY
     C                   CLEAR                   DATE_ERR
     C                   CLEAR                   WEEK_DAY_#
     C                   CLEAR                   WEEK_DAY
     C                   MOVE      DATE_IN       DATE_SAVE
      * No date given - return
     C                   IF        (DATE_IN <= 010101 AND (DATE_FMT = '*MDY' OR
     C                              DATE_FMT = '*YMD' OR  DATE_FMT = '*ISO'  OR
     C                              DATE_FMT = '*USA')) OR
     C                             (DATE_IN <= *ZEROS AND DATE_FMT = '*JUL') OR
     C                             (DATE_IN <= 100 AND (DATE_FMT = '*MCY' OR
     C                              DATE_FMT = '*CYM' ))
     C                   MOVE      'N'           DATE_ERR
     C                   RETURN
     C                   ENDIF                                                  
IF DATE_IN LT 010101
      * Check DATE_FMT - return
     C                   IF        NOT (DATE_FMT = '*MDY' OR
     C                                  DATE_FMT = '*YMD' OR
     C                                  DATE_FMT = '*ISO' OR
     C                                  DATE_FMT = '*USA' OR
     C                                  DATE_FMT = '*JUL' OR
     C                                  DATE_FMT = '*MCY' OR
     C                                  DATE_FMT = '*CYM' )
     C                   MOVE      '*MDY'        DATE_FMT
     C                   ENDIF                                                  
IF NOT (DATE_FMT=*MD
     C                   MOVE      DATE_IN       DATE_WORK
     C                   MOVE      *OFF          *IN41                          
Error Indicator
     C                   SELECT
     C                   WHEN      DATE_FMT = '*MDY' AND D1 = *ZEROS
     C                   EVAL      CENT_DATE = DT3*10**6+D4*10**4+D2*100+D3
     C                   WHEN      DATE_FMT = '*MDY' AND D1 > *ZEROS
     C                   EVAL      CENT_DATE = D3*10**6+D4*10**4+D1*100+D2
     C                   WHEN      DATE_FMT = '*YMD' AND D1 = *ZEROS
     C                   EVAL      CENT_DATE = DT3*10**6+D2*10**4+D3*100+D4
     C                   WHEN      DATE_FMT = '*YMD' AND D1 > *ZEROS
     C                   EVAL      CENT_DATE = D1*10**6+D2*10**4+D3*100+D4
     C                   WHEN      DATE_FMT = '*ISO' AND D1 = *ZEROS
     C                   EVAL      CENT_DATE = DT3*10**6+D2*10**4+D3*100+D4
     C                   WHEN      DATE_FMT = '*ISO' AND D1 > *ZEROS
     C                   EVAL      CENT_DATE = D1*10**6+D2*10**4+D3*100+D4
     C                   WHEN      DATE_FMT = '*USA' AND D1 = *ZEROS
     C                   EVAL      CENT_DATE = DT3*10**6+D4*10**4+D2*100+D3
     C                   WHEN      DATE_FMT = '*USA' AND D1 > *ZEROS
     C                   EVAL      CENT_DATE = D3*10**6+D4*10**4+D1*100+D2
     C                   WHEN      DATE_FMT = '*JUL'
     C     *JUL          MOVE      DATE_IN       DATE_JUL
     C                   MOVE      DATE_JUL      DATE_ISO
     C                   MOVE      DATE_ISO      CENT_DATE
     C                   WHEN      DATE_FMT = '*MCY' AND D2 = *ZEROS            
month year
     C                   EVAL      CENT_DATE = DT3*10**6+D4*10**4+D3*100+01
     C                   EVAL      DATE_IN = D3*10**4+DT3*100+D4                
change to mo cy yr
     C                   WHEN      DATE_FMT = '*MCY' AND D2 > *ZEROS            
month century year
     C                   EVAL      CENT_DATE = D3*10**6+D4*10**4+D2*100+01
     C                   WHEN      DATE_FMT = '*CYM' AND D2 = *ZEROS            
year month
     C                   EVAL      CENT_DATE = DT3*10**6+D3*10**4+D4*100+01
     C                   EVAL      DATE_IN = DT3*10**4+D3*100+D4                
change to cy yr mo
     C                   WHEN      DATE_FMT = '*CYM' AND D2 > *ZEROS            
century year month
     C                   EVAL      CENT_DATE = D2*10**6+D3*10**4+D4*100+01
     C                   ENDSL
     C  N41*ISO          TEST(D)                 CENT_DATE              41
     C                   IF        *IN41 = *ON
     C                   MOVE      '1'           DATE_ERR                       
  bad date
     C                   MOVE      DATE_SAVE     DATE_IN
     C                   ELSE
     C                   MOVE      CENT_DATE     DATE_WORK
     C                   MOVE      D1            DATE_CY
     C                   MOVE      D2            DATE_YR
     C                   MOVE      D3            DATE_MO
     C                   MOVE      D4            DATE_DY
     C                   IF        CENT_DATE > 19400101 AND CENT_DATE < 20391231
     C     *ISO          MOVE      CENT_DATE     DATE_YMD
     C     *ISO          MOVE      CENT_DATE     DATE_MDY
     C     *ISO          MOVE      CENT_DATE     DATE_JUL
     C                   ELSE
     C                   EVAL      DATE_6 = DATE_YR*10000 +DATE_MO*100 + DATE_DY
     C     *YMD          MOVE      DATE_6        DATE_YMD
     C                   EVAL      DATE_6 = DATE_MO*10000 +DATE_DY*100 + DATE_YR
     C     *MDY          MOVE      DATE_6        DATE_MDY
     C                   ENDIF                                                  
CENT_DATE > 01011940
     C     *ISO          MOVE      CENT_DATE     DATE_ISO
     C     *ISO          MOVE      CENT_DATE     DATE_USA
     C                   SELECT
     C                   WHEN      DATE_FMT = '*MDY' AND D1 = *ZEROS AND
     C                             CENT_DATE > 19400101 AND CENT_DATE < 20391231
     C     *MDY          MOVE      DATE_ISO      DATE_IN
     C                   WHEN      DATE_FMT = '*MDY' AND D1 = *ZEROS AND
     C                             (CENT_DATE < 19400101 OR CENT_DATE> 20391231)
     C                   EVAL      DATE_IN = DATE_MO*10000 +DATE_DY*100 +DATE_YR
     C                   WHEN      DATE_FMT = '*YMD' AND D1 = *ZEROS AND
     C                             CENT_DATE > 19400101 AND CENT_DATE < 20391231
     C     *YMD          MOVE      DATE_ISO      DATE_IN
     C                   WHEN      DATE_FMT = '*YMD' AND D1 = *ZEROS AND
     C                             (CENT_DATE< 19400101 OR CENT_DATE > 20391231)
     C                   EVAL      DATE_IN = DATE_YR*10000 +DATE_MO*100 +DATE_DY
     C                   WHEN      DATE_FMT = '*ISO' AND D1 = *ZEROS
     C     *ISO          MOVE      DATE_ISO      DATE_IN
     C                   WHEN      DATE_FMT = '*USA' AND D1 = *ZEROS
     C     *USA          MOVE      DATE_ISO      DATE_IN
     C                   ENDSL
     C                   MOVEL     'YYYY-MM-DD'  PICT_S_F1
     C                   MOVEL     DATE_ISO      DATE_S_F1
     C                   CALLB(D)  'CEEDAYS'
     C                   PARM                    DATE_S_F1
     C                   PARM                    PICT_S_F1
     C                   PARM                    TIME_LILI
     C                   PARM                    FC
     C                   CALLB     'CEEDYWK'
     C                   PARM                    TIME_LILI
     C                   PARM                    DAY_NO
     C                   PARM                    FC
     C                   IF        DAY_NO > *ZERO
     C                   MOVE      DAY_NO        WEEK_DAY_#
     C                   EVAL      WEEK_DAY=WEEK_DAYS(WEEK_DAY_#)
      * move words for the date
     C                   MOVEL(P)  D4            TEMP
     C                   IF        D4 < 10
     C                   MOVEL     ' '           TEMP
     C                   ENDIF                                                  
D4 < 10
     C                   EVAL      DATE_WRD = %TRIM(MONTH_NAME(D3)) + ' ' +
     C                              %TRIM(TEMP) + ', ' + %SUBST(DATE_S_F1:1:4)
     C                   EVAL      DATE_WMY = %TRIM(MONTH_NAME(D3)) + ', ' +
     C                              %SUBST(DATE_S_F1:1:4)
     C                   ENDIF                                                  
IF DAY_NO > *ZERO
     C                   ENDIF                                                  
*IN41 = *ON
     C                   RETURN
      ***********************************************************************
      *      INITIALIZATION
      ***********************************************************************
     C     *INZSR        BEGSR
     C                   CLEAR                   WORK_DATES
     C                   MOVE      *DATE         DATE_TODAY
     C                   ENDSR
      ***********************************************************************
      *      PROGRAM ERROR
      ***********************************************************************
     C     *PSSR         BEGSR
     C                   MOVE      'U'           DATE_ERR
     C                   RETURN
     C                   ENDSR
** Days of the Week
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
** Month Names
January
February
March
April
May
June
July
August
September
October
November
December
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.