John rated Calendrical calculations: 5 stars June 28, 2018 Public Calendrical calculations by Edward M. Reingold