Here is a list of all 146097 dates, including the day of the week, of the 400-year Gregorian calendar cycle. (Text file compressed with XZ.) With it, one can easily verify, with grep, curious facts like the 13th of a month being most likely to fall on a Friday. Or look up your birthday to see what day of the week you were born, adding a multiple of 400 years as necessary.
Also included is the Haskell computer program which generated the list. As an exercise, instead of using Zeller's Congruence, the function gregorianTomorrow
increments a date by one day, then we iterate
that for 400 years. The only tricky bit is the computation of the number of days in February:
lastDayOfMonth = Day $ if elem m thirtyDayMonths then 30 else if m /= February then 31 else case mod y 4 of { 0 -> case mod y 100 of { 0 -> case mod y 400 of { 0 -> 29; _ -> 28; }; _ -> 29; }; _ -> 28; };
1 comment :
I think it may be clearer as :
n `divide` m = m `mod` n == 0
isBissextile y = 4 `divide` y && not (100 `divide` y) || 400 `divide` y
lastDayOfMonth
| m `elem` thirtyDayMonths = 30
| m /= February = 31
| isBissextile y = 29
| otherwise = 28
Post a Comment