Will it generate Valid Leap Day 02-29 in 2012, 2016, 2020, etc?
Will it generate invalid dates , 02-29, 02-30, 02-31, 04-31, 06-31,
09-31, 11-31, etc?

On Fri, Apr 26, 2019 at 12:48 PM Sri h Kolusu <skol...@us.ibm.com> wrote:
>
> > Also if you have any other ideas for generating random dates (YYYYMMDD)
> overall, I would welcome your thoughts!
>
> Bill,
>
> DFSORT has plethora of date arithmetic/conversion functions that can get
> you the desired results.   Here is a JCL that will generate dates for any
> year that you provide.
>
> You can pass 3 parms. The Begin-year , End year and Number of records.
>
> The Begin-Year and End Year parameters are self explanatory.   The number
> of records can either be a multiple of 365 or 366.   So if your number of
> records have a value that does NOT end with year end date, then you can use
> End year PARM to filter the records (Step0400)
>
> //         EXPORT SYMLIST=*
> //         SET BYEAR=1753
> //         SET EYEAR=2019
> //         SET NUMREC=310131
> //**********************************************************************
> //*  SET BYEAR   = NNNNNNNNNN   (VALID RANGE IS 1 TO 9999)             *
> //*  SET EYEAR   = NNNNNNNNNN   (VALID RANGE IS 1 TO 9999)             *
> //*  SET NUMREC  = NNNNNNNNNN   (REQUIRED NUMBER OF YEARS * 366)       *
> //*                             (VALID RANGE 366 TO 3659634)           *
> //*                                                                    *
> //*  BYEAR , EYEAR AND NUMREC CAN BE PASSED WITH LEADING ZEROS UPTO 10 *
> //*  10 DIGITS. ONLY THE FIRST 10 DIGITS YOU PASS ARE TAKEN INTO       *
> //*  CONSIDERATION.                                                    *
> //*                                                                    *
> //*  EXAMPLE 01 :                                                      *
> //*  SET BYEAR = 1753  AND NUMREC = 310131                             *
> //*  WILL GENERATE DATE CALENDAR FROM 1753-01-01 TO 2601-12-31         *
> //*                                                                    *
> //*  EXAMPLE 02 :                                                      *
> //*  SET BYEAR = 0001  AND NUMREC = 9999 * 366 = 3659634               *
> //*  WILL GENERATE DATE CALENDAR FROM 0001-01-01 TO 9999-12-31         *
> //*                                                                    *
> //**********************************************************************
> //**********************************************************************
> //*  DELETE THE OUTPUT FILE IT EXISTS                                  *
> //**********************************************************************
> //STEP0100 EXEC PGM=IDCAMS
> //SYSPRINT DD SYSOUT=*
> //SYSIN    DD *,SYMBOLS=JCLONLY
>   DELETE '&SYSUID..GENERATE.YEARDATA'
>   SET MAXCC=0
> //*
> //**********************************************************************
> //*  VALIDATE THE PASSED PARMS AND BUILD SYMBOLS                       *
> //**********************************************************************
> //STEP0200 EXEC PGM=SORT,
> // PARM=('JP1"&BYEAR"',
> //       'JP2"&NUMREC"',
> //       'JP3"&EYEAR"')
> //SYSOUT   DD SYSOUT=*
> //SYMNOUT  DD SYSOUT=*
> //SORTIN   DD *
>
> //SORTOUT  DD DSN=&&S,DISP=(,PASS),SPACE=(TRK,(1,1),RLSE)
> //SYSIN    DD *
>   OPTION COPY
>   INREC IFTHEN=(WHEN=INIT,BUILD=(01:JP1,11:JP2,21:JP3,80:X)),
>   IFTHEN=(WHEN=INIT,BUILD=(01:01,10,UFF,M11,LENGTH=10,
>                            11:11,10,UFF,M11,LENGTH=10,
>                            21:21,10,UFF,M11,LENGTH=10)),
>
>   IFTHEN=(WHEN=(01,10,ZD,EQ,0,OR,01,10,ZD,GT,9999),
>   OVERLAY=(01:9C'0',C'1'),HIT=NEXT),
>   IFTHEN=(WHEN=(11,10,ZD,LT,366,OR,11,10,ZD,GT,3659634),
>   OVERLAY=(11:7C'0',C'366'),HIT=NEXT),
>   IFTHEN=(WHEN=(21,10,ZD,EQ,0,OR,21,10,ZD,GT,9999),
>   OVERLAY=(21:6C'0',DATE1),HIT=NEXT),
>   IFTHEN=(WHEN=(21,10,ZD,LT,01,10,ZD),
>   OVERLAY=(21:01,10),HIT=NEXT),
>   IFTHEN=(WHEN=(01,10,ZD,GT,0,AND,01,10,ZD,LE,9999),
>   OVERLAY=(40:((+9999,SUB,7,4,ZD),ADD,+1),
>                 MUL,+366,M11,LENGTH=10),HIT=NEXT),
>   IFTHEN=(WHEN=(11,10,ZD,LT,40,10,ZD),
>   OVERLAY=(40:11,10))
>   OUTFIL BUILD=(C'BEGIN-YEAR,C''',07,4,C'''',/,
>                 C'END-YEAR,C''',27,4,C'''',/,
>                 C'RPT-VALUES,',43,7,80:X)
> //*
> //**********************************************************************
> //*  GENERATE THE DATES FROM 0001-01-01 TO 9999-12-31                  *
> //**********************************************************************
> //STEP0300 EXEC PGM=SORT
> //SYSOUT   DD SYSOUT=*
> //SYMNAMES DD DISP=(OLD,PASS),DSN=&&S
> //SYMNOUT  DD SYSOUT=*
> //SORTIN   DD *
>
> //SORTOUT  DD DSN=&&O1,DISP=(,PASS),SPACE=(CYL,(60,60),RLSE)
> //SYSIN    DD *
>   OPTION COPY
>   OUTFIL REPEAT=RPT-VALUES,IFOUTLEN=10,
>   IFTHEN=(WHEN=INIT,
>          BUILD=(11:BEGIN-YEAR,C'0101',
>                 20:SEQNUM,8,ZD,START=0)),
>   IFTHEN=(WHEN=INIT,
>   OVERLAY=(11,8,Y4T,ADDDAYS,20,8,ZD,TOGREG=Y4T))
> /*
> //**********************************************************************
> //*  EXTRACT THE RECORDS TO YEAR END AS PASSED NUMRECS CAN EXCEED      *
> //*  BEYOND END YEAR                                                   *
> //**********************************************************************
> //STEP0400 EXEC PGM=SORT
> //SYSOUT   DD SYSOUT=*
> //SYMNAMES DD DISP=(OLD,PASS),DSN=&&S
> //SYMNOUT  DD SYSOUT=*
> //SORTIN   DD DISP=SHR,DSN=&&O1
> //SORTOUT  DD DSN=&SYSUID..GENERATE.YEARDATA,
> //            DISP=(NEW,CATLG,DELETE),
> //            UNIT=SYSDA,
> //            SPACE=(CYL,(60,60),RLSE)
> //SYSIN    DD *
>   OPTION COPY
>   INCLUDE COND=(1,4,CH,GE,BEGIN-YEAR,AND,
>                 1,4,CH,LE,END-YEAR)
> //*
>
>
> Btw CBTAPE already has a calendar generation Job using DFSORT.   Check the
> file 934.(Job Kolusu)  Here is a direct link to the file
> http://www.cbttape.org/ftp/cbt/CBT934.zip
>
> A Word of caution for people trying to run the calendar generation job with
> competitor product, that the results will be wrong as their invalid date
> processing logic is different from DFSORT.
>
> It generates the following content.
>
>
> //**********************************************************************
> //*                                                                    *
> //*  THE OUTPUT CALENDAR HAS THE FOLLOWING LAYOUT                      *
> //*                                                                    *
> //*  COL 01 - 08 : GREGORIAN DATE CCYYMMDD FORMAT                      *
> //*  COL 09 - 10 : NUMBER OF DAYS REMAINING IN THAT PARTICULAR MONTH   *
> //*  COL 11 - 12 : MAXIMUM NUMBER OF DAYS IN THAT PARTICULAR MONTH     *
> //*  COL 13 - 13 : WEEKDAY NAME OCCURRENCE IN NUMERIC (1-5)             *
> //*  COL 14 - 14 : REMAINING WEEKDAY NAME OCCURRENCE IN NUMERIC (1-4)   *
> //*  COL 15 - 15 : TOTAL OCCURRENCES IN MONTH FOR THE WEEKDAY   (1-5)   *
> //*  COL 16 - 18 : WEEKDAY NAME IN 3 CHARACTER FORMAT (MON,TUE...)     *
> //*  COL 19 - 21 : JULIAN DAY OF THE YEAR (001 - 366)                  *
> //*  COL 22 - 24 : REMAINING DAYS IN THIS YEAR (001 - 365)             *
> //*  COL 25 - 25 : L = LEAP YEAR C = NON LEAP YEAR                     *
> //*  COL 26 - 28 : WEEKDAY NAME OF FIRST DAY OF MONTH (MON,TUE...)     *
> //*  COL 29 - 31 : WEEKDAY NAME OF LAST DAY OF MONTH (MON,TUE...)      *
> //*  COL 32 - 38 : UNIQUE 7 BYTE SEQUENCE NUMBER                       *
> //**********************************************************************
>
>
> Thanks,
> Kolusu
> DFSORT Development
> IBM Corporation
>
>
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN



-- 
Mike A Schwab, Springfield IL USA
Where do Forest Rangers go to get away from it all?

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to