If you have a copybook that maps the records you want to generate then IBM File Manager can be used to generate random date values. You could use the copybook with the File Manager "Data Create Utility":
https://www.ibm.com/support/knowledgecenter/en/SSXJAV_14.1.0/com.ibm.filemanager.doc_14.1/base/dsgtemp.html The edit copybook/template function can be used to identify fields containing date values and scrambling processing for those date fields can also be defined: https://www.ibm.com/support/knowledgecenter/en/SSXJAV_14.1.0/com.ibm.filemanager.doc_14.1/base/datetime.html These features are also available for the File Manager "Copy Utility". Regards, Peter Van Dyke HCL Technologies On Mon, 29 Apr 2019 at 05:09, Thomas Kern < [email protected]> wrote: > I was thinking that generating the random dates in Julian format > (15001-15365,16001-16366) and then convert the whatever date format your > record needed (yyyy-mm-dd). > > /Tom Kern > > > On 04/26/2019 13:48, Sri h Kolusu 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 [email protected] with the message: INFO IBM-MAIN > > > > ---------------------------------------------------------------------- > For IBM-MAIN subscribe / signoff / archive access instructions, > send email to [email protected] with the message: INFO IBM-MAIN > ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to [email protected] with the message: INFO IBM-MAIN
