MVSFORUMS.com A Community of and for MVS Professionals
View previous topic :: View next topic
Author
Message
quick Beginner Joined: 02 May 2007 Posts: 2 Topics: 1
Posted: Mon May 14, 2007 1:57 pm Post subject: Date to DAY conversion
My input file has date field like 02/21/2007 (starting at postion 1, lerecl =100). Can I convert this date field to Day as shown below:
Quote:
input:
02/21/2007 data
02/22/2007 data
Output:
Wednesday;02/21/2007 data
Thursday;02/22/2007 data..
Thanks,
Quick
Back to top
kolusu Site Admin Joined: 26 Nov 2002 Posts: 12377 Topics: 75 Location: San Jose
Posted: Mon May 14, 2007 2:17 pm Post subject:
quick ,
check this JCL
Code:
//*********************************************************************
//** **
//** THE FOLLOWING SORT IS USED TO CONVERT A GREGORIAN DATE TO THE **
//** CORRESPONDING DAY NAME. THE FORMULA IS DERIVED FROM ZELLERS **
//** CONGRUENCE. **
//** **
//** 00 = SUNDAY 01 = MONDAY 02 = TUESDAY 03 = WEDNESDAY **
//** 04 = THURSDAY 05 = FRIDAY 06 = SATURDAY **
//** **
//** THIS SORT VALIDATES THE DATES ALSO. IT CHECKS FOR LEAP YEARS. **
//** THE VALID-DATE RANGES ARE 1600-01-01 TO 9999-12-31. **
//** **
//** INREC DOES THE VALIDATION OF THE DATE . **
//** OUTREC PERFORMS THE ACTUAL CALCULATION OF THE DATE **
//** OUTFIL INTERPRETS THE DAYNAMES BASED ON THE CALCULATION. **
//** **
//** THE SAMPLE PSUEDO CODE OF THE CALCULATION IS : **
//** **
//** IF IN-MONTH < 3 **
//** SUBTRACT 1 FROM IN-YEAR **
//** ADD 10 TO IN-MONTH **
//** ELSE **
//** SUBTRACT 0 FROM IN-YEAR **
//** SUBTRACT 2 FROM IN-MONTH **
//** END-IF **
//** **
//** DIVIDE IN-YEAR BY 100 GIVING IN-CENTURY REMAINDER IN-YEAR **
//** **
//** COMPUTE IN-TEMP = ((26 * IN-MONTH) - 2) / 10. **
//** **
//** COMPUTE IN-TEMP = IN-TEMP + IN-DAY + IN-YEAR. **
//** **
//** COMPUTE IN-TEMP = IN-TEMP + **
//** (IN-YEAR / 4) + **
//** (IN-CENTURY / 4) **
//** **
//** **
//** COMPUTE IN-TEMP = IN-TEMP - (2 * IN-CENTURY). **
//** **
//** DIVIDE IN-TEMP BY 7 GIVING IN-TEMP REMAINDER IN-DOW. **
//** **
//** IF IN-DOW < 0 **
//** ADD 7 TO IN-DOW **
//** END-IF. **
//** **
//** DISPLAY 'DAY NAME : ' IN-DOW **
//** **
//*********************************************************************
//STEP0100 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=your input dsn,
// DISP=SHR
//SORTOUT DD DSN=your output dsn,
// DISP=(NEW,CATLG,DELETE),
// UNIT=SYSDA,
// SPACE=(CYL,(X,Y),RLSE)
//SYSIN DD *
OPTION COPY,NOSZERO
INREC IFTHEN=(WHEN=INIT,
OVERLAY=(101:07,04,ZD,MOD,+4,EDIT=(T),
102:07,04,ZD,MOD,+100,EDIT=(TTT),
105:07,04,ZD,MOD,+400,EDIT=(TTT)),HIT=NEXT),
IFTHEN=(WHEN=(105,3,ZD,EQ,0,OR,
(101,1,ZD,EQ,0,AND,102,3,ZD,GT,0)),
OVERLAY=(108:C'L'),HIT=NEXT),
IFTHEN=(WHEN=(01,02,ZD,EQ,01,AND,
04,02,ZD,GT,31),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(108,01,CH,NE,C'L',AND,
001,02,ZD,EQ,02,AND,
004,02,ZD,GT,28),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(108,01,CH,EQ,C'L',AND,
001,02,ZD,EQ,02,AND,
004,02,ZD,GT,29),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(01,02,ZD,EQ,03,AND,
04,02,ZD,GT,31),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(01,02,ZD,EQ,04,AND,
04,02,ZD,GT,30),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(01,02,ZD,EQ,05,AND,
04,02,ZD,GT,31),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(01,02,ZD,EQ,06,AND,
04,02,ZD,GT,30),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(01,02,ZD,EQ,07,AND,
04,02,ZD,GT,31),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(01,02,ZD,EQ,08,AND,
04,02,ZD,GT,31),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(01,02,ZD,EQ,09,AND,
04,02,ZD,GT,30),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(01,02,ZD,EQ,10,AND,
04,02,ZD,GT,31),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(01,02,ZD,EQ,11,AND,
04,02,ZD,GT,30),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(01,02,ZD,EQ,12,AND,
04,02,ZD,GT,31),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=(01,02,ZD,GT,12,OR,
07,04,ZD,LT,1600,OR,
07,04,ZD,GT,9999),
OVERLAY=(110:C'INVALID'),HIT=NEXT),
IFTHEN=(WHEN=NONE,
OVERLAY=(110:7X))
OUTREC IFTHEN=(WHEN=(110,07,CH,EQ,C' ',AND,
001,02,ZD,LT,3),
OVERLAY=(120:+01,SUB,07,04,ZD,EDIT=(TTTT),
124:+10,ADD,01,02,ZD,EDIT=(TT)),HIT=NEXT),
IFTHEN=(WHEN=(110,07,CH,EQ,C' ',AND,
01,02,ZD,GE,3),
OVERLAY=(120:07,04,
124:+02,SUB,01,02,ZD,EDIT=(TT)),HIT=NEXT),
IFTHEN=(WHEN=(110,07,CH,EQ,C' '),
OVERLAY=(127:120,4,ZD,DIV,+100,EDIT=(TTTT),
131:120,4,ZD,MOD,+100,EDIT=(TT),
135:((+26,MUL,124,2,ZD),SUB,+2),DIV,+10,LENGTH=8,
143:135,8,SFF,ADD,
004,2,ZD,ADD,
131,2,ZD,LENGTH=8,
151:143,8,SFF,ADD,
(131,2,ZD,DIV,+4),ADD,
(127,4,ZD,DIV,+4),
LENGTH=8,
159:(151,8,SFF,SUB,
(+2,MUL,127,4,ZD)),MOD,+7,LENGTH=8),HIT=NEXT),
IFTHEN=(WHEN=(159,8,SFF,LT,0),
OVERLAY=(170:+7,ADD,159,8,SFF,EDIT=(T)),HIT=NEXT),
IFTHEN=(WHEN=(159,8,SFF,GE,0),
OVERLAY=(170:159,8,SFF,EDIT=(T)))
OUTFIL IFOUTLEN=50,
IFTHEN=(WHEN=(110,07,CH,EQ,C' ',AND,
170,01,CH,EQ,C'0'),
BUILD=(C'SUNDAY ',01,100)),
IFTHEN=(WHEN=(110,07,CH,EQ,C' ',AND,
170,01,CH,EQ,C'1'),
BUILD=(C'MONDAY ',01,100)),
IFTHEN=(WHEN=(110,07,CH,EQ,C' ',AND,
170,01,CH,EQ,C'2'),
BUILD=(C'TUESDAY ',01,100)),
IFTHEN=(WHEN=(110,07,CH,EQ,C' ',AND,
170,01,CH,EQ,C'3'),
BUILD=(C'WEDNESDAY ',01,100)),
IFTHEN=(WHEN=(110,07,CH,EQ,C' ',AND,
170,01,CH,EQ,C'4'),
BUILD=(C'THURSDAY ',01,100)),
IFTHEN=(WHEN=(110,07,CH,EQ,C' ',AND,
170,01,CH,EQ,C'5'),
BUILD=(C'FRIDAY ',01,100)),
IFTHEN=(WHEN=(110,07,CH,EQ,C' ',AND,
170,01,CH,EQ,C'6'),
BUILD=(C'SATURDAY ',01,100)),
IFTHEN=(WHEN=NONE,
BUILD=(C'INVALID ',01,100))
/*
Hope this helps...
Cheers
Kolusu _________________ Kolusu
www.linkedin.com/in/kolusu
Back to top
dbzTHEdinosauer Supermod Joined: 20 Oct 2006 Posts: 1411 Topics: 26 Location: germany
Posted: Mon May 14, 2007 2:41 pm Post subject:
thx Kolusu,
have added this to my PDF collection of sort tricks..... _________________ Dick Brenholtz
American living in Varel, Germany
Back to top
quick Beginner Joined: 02 May 2007 Posts: 2 Topics: 1
Posted: Tue May 15, 2007 9:34 am Post subject:
This is awesome... Thanks Kolusu..
Back to top
kolusu Site Admin Joined: 26 Nov 2002 Posts: 12377 Topics: 75 Location: San Jose
Posted: Mon Nov 16, 2009 2:32 pm Post subject:
quick ,
With z/OS DFSORT V1R5 PTF UK51706 or z/OS DFSORT V1R10 PTF UK51707, you can use the new date conversion function WEEKDAY like shown below to get the desired results
Code:
//STEP0100 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD DSN=your input fb 1000 byte file,DISP=SHR
//SORTOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
INREC IFOUTLEN=1000,
IFTHEN=(WHEN=INIT,OVERLAY=(1001:1,10,UFF,M11,LENGTH=8)),
IFTHEN=(WHEN=INIT,BUILD=(1001,8,Y4W,WEEKDAY=CHAR9,C';',1,1000))
//*
The output is
Code:
WEDNESDAY;02/21/2007 DATA
THURSDAY ;02/22/2007 DATA
For complete details on date conversion functions and the other new functions available with the Nov, 2009 DFSORT PTF, see:
http://www.ibm.com/support/docview.wss?rs=114&uid=isg3T7000174 _________________ Kolusu
www.linkedin.com/in/kolusu
Back to top
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum