MVSFORUMS.com Forum Index MVSFORUMS.com
A Community of and for MVS Professionals
 
 FAQFAQ   SearchSearch   Quick Manuals   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Date to DAY conversion

 
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities
View previous topic :: View next topic  
Author Message
quick
Beginner


Joined: 02 May 2007
Posts: 2
Topics: 1

PostPosted: Mon May 14, 2007 1:57 pm    Post subject: Date to DAY conversion Reply with quote

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
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12377
Topics: 75
Location: San Jose

PostPosted: Mon May 14, 2007 2:17 pm    Post subject: Reply with quote

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
View user's profile Send private message Send e-mail Visit poster's website
dbzTHEdinosauer
Supermod


Joined: 20 Oct 2006
Posts: 1411
Topics: 26
Location: germany

PostPosted: Mon May 14, 2007 2:41 pm    Post subject: Reply with quote

thx Kolusu,

have added this to my PDF collection of sort tricks.....
_________________
Dick Brenholtz
American living in Varel, Germany
Back to top
View user's profile Send private message
quick
Beginner


Joined: 02 May 2007
Posts: 2
Topics: 1

PostPosted: Tue May 15, 2007 9:34 am    Post subject: Reply with quote

This is awesome... Thanks Kolusu..
Back to top
View user's profile Send private message
kolusu
Site Admin
Site Admin


Joined: 26 Nov 2002
Posts: 12377
Topics: 75
Location: San Jose

PostPosted: Mon Nov 16, 2009 2:32 pm    Post subject: Reply with quote

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
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view    MVSFORUMS.com Forum Index -> Utilities All times are GMT - 5 Hours
Page 1 of 1

 
Jump to:  
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


MVSFORUMS
Powered by phpBB © 2001, 2005 phpBB Group