PL1 program to convert date into day of week using Zellers algorithm
/*================================================================= */
Zeller:proc(ccyy,mm,dd) returns(fixed bin(31));
/* 0=sat 1=sun 2=mon 3=tue 4=wed 5=thu 6=fri */
dcl ccyy fixed bin(31);
dcl dd fixed bin(31);
dcl mm fixed bin(31);
dcl n1 fixed bin(31) init(000);
dcl n2 fixed bin(31) init(000);
dcl r fixed bin(31) init(000);
dcl wccyy fixed bin(31) init(000);
dcl wm fixed bin(31) init(000);
dcl wccyyd400 fixed bin(31) init(000);
dcl wccyyd100 fixed bin(31) init(000);
dcl zday_num fixed bin(31) init(000);
wccyy=ccyy ;
wm=mm ;
If wm < 3 then do;
wm = wm + 12;
wccyy = ccyy - 1;
End;
n1 = (wm + 1) * 26 / 10 ;
n2 = wccyy * 125 / 100 ;
wccyyd400 = wccyy / 400;
wccyyd100 = wccyy / 100;
zday_num = wccyyd400 - wccyyd100 + dd + n1 + n2 ;
r = zday_num / 7;
zday_num = zday_num - r * 7 ;
return(zday_num);
end Zeller;
/*================================================================= */
COBOL program to convert date into day of week using Zellers algorithm
IDENTIFICATION DIVISION.
PROGRAM-ID. ZELLER.
AUTHOR. William Evers email:wevers@allmerica.com
******************************************************************
* --- COBOL 3 --- *
* RECEIVE A DATE IN FORMAT CCYYMMDD AND RETURNS AN INTEGER *
* THAT REPRESENTS THE DAY OF THE WEEK. *
* (BASED ON ZELLER'S ALGORITM) *
* 1 = SUNDAY *
* 2 = MONDAY *
* 3 = TUESDAY *
* 4 = WEDNESDAY *
* 5 = THURSDAY *
* 6 = FRIDAY *
* 7 = SATURDAY *
******************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
******************************************************************
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 WS-CCYY PIC 9(04) COMP-3.
01 WS-MM PIC 9(02) COMP-3.
01 WS-N1 PIC 9(10) COMP-3.
01 WS-N2 PIC 9(10) COMP-3.
01 WS-DAY-INTEGER PIC 9(10) COMP-3.
01 WS-CCYYD400 PIC 9(10) COMP-3.
01 WS-CCYYD100 PIC 9(10) COMP-3.
LINKAGE SECTION.
01 LK-CCYYMMDD.
05 LK-CCYY PIC 9(4).
05 LK-MM PIC 99.
05 LK-DD PIC 99.
01 LK-DAY PIC 9.
******************************************************************
PROCEDURE DIVISION USING LK-CCYYMMDD
LK-DAY.
0000-MAIN.
IF LK-MM < 3
COMPUTE WS-MM = LK-MM + 12
COMPUTE WS-CCYY = LK-CCYY - 1
ELSE
MOVE LK-MM TO WS-MM
MOVE LK-CCYY TO WS-CCYY
END-IF
COMPUTE WS-N1 = (WS-MM + 1) * 26 / 10
COMPUTE WS-N2 = WS-CCYY * 125 / 100
COMPUTE WS-CCYYD400 = WS-CCYY / 400
COMPUTE WS-CCYYD100 = WS-CCYY / 100
COMPUTE WS-DAY-INTEGER = WS-CCYYD400 - WS-CCYYD100
+ LK-DD + WS-N1 + WS-N2
COMPUTE LK-DAY = FUNCTION REM (WS-DAY-INTEGER, 7)
IF LK-DAY = 0
MOVE 7 TO LK-DAY
END-IF.
EXIT PROGRAM.
****************************************************************
Contact marshall_alan@hotmail.com
Recycled Books Shed main page
Recycled Books Shed page 2 - photos, links, other things