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