You are here

Calendrical Calculations: The Ultimate Edition

Edward M. Reingold and Nachum Dershowitz
Cambridge University Press
Publication Date: 
Number of Pages: 
[Reviewed by
John D. Cook
, on

Calendars are complicated. The now-standard Gregorian calendar system is fairly complicated at first glance — some months have 30 days, some 31, and one has 28, or maybe 29 — and most people are not aware of further complications such as when centuries are leap years. Even so, the Gregorian calendar is simpler than many others.

Why are calendars so complicated? They try to reconcile three periodic functions with incommensurate periods: the rotation of the earth on its axis, the rotation of the moon around the earth, and the revolution of the earth around the sun. Not one of these things has a period that is a simple rational multiple of another.

In the time it takes the earth to complete a revolution around the sun, it turns on its axis approximately 365 times. Or to be more precise, about 365 1/4 times. But that’s not exact either. A better approximation, the one implicit in the Gregorian calendar, is 365 97/400. That’s pretty good, but it’s still not exact, and so you get occasional leap seconds. And when you add the motion of the moon into the mix, as many traditional and religious calendars do, things get far more complicated.

These complications lead to some interesting history and mathematics. For example, since calendar systems need a sequence of approximations to irrational numbers (such as the ratio of the earth’s revolution period to its rotation period), continued fractions naturally appear.

In their book Calendrical Calculations, Edward Reingold and Nachum Dershowitz dive into a wide variety of calendar systems in great detail. They examine around 20 calendar systems, including religious calendars such as Jewish, Islamic, and Christian ecclesiastical calendars, and historical calendars such as the Mayan and French Revolutionary calendars.

The book includes Common Lisp implementations of all the calculations it discusses, and makes frequent reference to Lisp functions in the text. This has the disadvantage of making the book harder to jump into casually. For example, the book describes how to calculate the date of Easter, both by the Gregorian and Eastern Orthodox systems, but to understand the details you have to follow references to Lisp functions.

While the reliance on software makes the book harder to skim, it makes the book far more precise. If you really want to know how to make calculations according to any of the calendar systems in the book, you need to handle a lot of details, and software makes these details explicit. (And testable. I would have more confidence in the correctness of software than purely prose descriptions because presumably the former has been tested, and would be easier to test if I were to verify it myself.) Software functions can refer to each other in far more precise ways than text references. Calendrical Calculations is a large book, around 600 pages, and would either be a much larger book if it were not for the concise expression that the Lisp code affords.

Edward Reingold is the original author of the calendar software included in GNU Emacs. Much of the code in the book began life as part of Emacs and was rewritten in Common Lisp to make it accessible to a wider audience. The resource page for the book makes all the source code for the book available for download. The code has been ported to Python and perhaps to other programming languages.

John D. Cook is an independent consultant working in applied mathematics, statistics, and computing.

1. Calendar basics
Part I. Arithmetical Calendars:
2. The Gregorian calendar
3. The Julian calendar
4. The Coptic and Ethiopic calendars
5. The ISO calendar
6. The Icelandic calendar
7. The Islamic calendar
8. The Hebrew calendar
9. The Ecclesiastical calendars
10. The old Hindu calendars
11. The Mayan calendars
12. The Balinese Pawukon calendar
13. Generic Cyclical calendars
Part II. Astronomical Calendars:
14. Time and astronomy
15. The Persian calendar
16. The Bahá'í calendar
17. The French Revolutionary calendar
18. Astronomical Lunar calendars
19. The Chinese calendar
20. The modern Hindu calendars
21. The Tibetan calendar
Part III. Appendices: A. Function, parameter, and constant types
B. Cross references
C. Sample data
D. Lisp implementation.