Dates and Times

Gary Puckering garyp at cognos.UUCP
Wed Sep 10 03:53:04 AEST 1986


> > Is there also a simple routine that will allow me to calculate
> > what day of the week an arbitrary date falls on?
> 
> This is from the back of my calendar, and it still sounds like
> magic to me, but it works...
> 
> ...

There is an formula known as Zeller's Congruence which can be used to
calculate the day of the week given any date.  I found this somewhere,
years ago when I was a teenager, memorized it and never forgot it.  I
know it works for any year after 1700, maybe even earlier.  I can't
remember where it came from (I did well to remember the algorithm!).
Since it uses only integer addition and division, and one comparison
operation, its fairly cheap to implement.

Here it is:

	Let k be the day of the month
	    m be the month (March=1, April=2, ... December=10, January
			    and February are months 11 and 12 of the
			    previous year)
	    C be the century
	    D be the year of the century (adjusted according to m)
	    Z be the day of the week (0=Sunday, 6=Saturday)

	Then:

	  Z = { (26m - 2)//10 + k + D + D//4 + C//4 - 2C } mod 7

	  where // represents integer division with truncation


	Example:  for February 28, 1986

		k = 28
		y = 1986
		m = 2 - 2 = 0
		if m<1 then m=m+12, y=y-1
		C = 19
		D = 85

	Therefore:

		Z = { (26*12)//10 + 28 + 85 + 85//4 + 19//4 - 2*19} mod 7

		  = {      31     + 28 + 85 +  21   +   4   -  38 } mod 7
		  = { 131 } mod 7

		  = 5 (Friday)

-- 
Gary Puckering
COGNOS Incorporated
3755 Riverside Dr.
Ottawa, Ontario
Canada  K1G 3N3

Telephone: (613) 738-1440
Telex: 053-3341



More information about the Comp.unix mailing list