I'm designing a new calendar and I want the first day of the year to be the first day after the longest night of year in the northern hemisphere. Under this plan, "natural" leap years, where the first day of two adajacent years are 366 days apart, will occur every four years, but sometimes with a five year gap instead.

If I want this calendar to be embraced by the software engineers of the world, the position of those leap years will need to be predictable with a mathematical function that operates only on the year number, making no reference to observed astronomy.

Given a year number y, how can I predict if that year is a leap year, as defined above?

For the puroses of this question, my year numbers are the same as standard years for the bulk of the year, with the exception of the period between the winter solstice and new years day where they will differ by one.

Also, for the purposes of this question, assume that the Earth's cycles will remain as they are now indefinitely.

Update: I've rephrased the question a little after reading the comments.

Every year, there is day that's the first one after the longest night in the northern hemisphere. Most years, that day will be 365 days after the previous one.

Some years, that day will be 366 days later. I'll call them "natural leap years".

These "natural leap years" will mostly be four years apart, but will sometimes be five years apart instead.

How can I calculate, assuming the Earth's current cycles, when these "natural leap years" will occur?

  • $\begingroup$ If y is evenly divisible by 4, by 100 and 400, then you have a leap year. Modulo is your friend, in this case. $\endgroup$ Dec 22, 2011 at 13:47
  • $\begingroup$ @Mr.Disappointment - Those are standard leap years. I'm looking for a way to calculate natural leap years as I've outlined. $\endgroup$
    – billpg
    Dec 22, 2011 at 13:52
  • $\begingroup$ These "natural" leap years would follow exactly the same pattern as the Gregorian leap years, except possibly with some offset to the pattern, assuming that you are assuming perfect regularity, in logical extension of the assumption quoted at the bottom of the question and the comment about software engineers. You can calculate that offset yourself from ephemerides. $\endgroup$
    – Andrew
    Dec 22, 2011 at 14:00
  • $\begingroup$ hmmm,It's not clear to me what your asking. Are you looking mathematical functions that fit the Earth's orbit or for details about Earth's orbit? $\endgroup$
    – Nic
    Dec 22, 2011 at 14:01
  • 3
    $\begingroup$ PS- As long as you're working on this, will you please make each month exactly 28 days, plus a "February" or holiday feast at the end of the year to take up all the slack? Kthxbye $\endgroup$
    – Andrew
    Dec 22, 2011 at 14:05

2 Answers 2


The Gregorian calendar that we use today is a compromise between having leap years spaced as evenly as possible and keeping the calculations relatively simple. (The older Julian calendar, which had a leap year every 4 years, was also such a compromise, one with a greater bias toward simplicity.)

In the Gregorian calendar, every 4th year is a leap year, except that every 100th year is not a leap year, except that every 400th year is a leap year. The cycle repeats every 400 years, with 97 leap years in each cycle. But they're not distributed as evenly as they could be; most successive leap years are 4 years apart, but some of them are 8 years apart.

The Gregorian calendar assumes that a year is 365.2425 days. In fact, it's slightly less than that; WolframAlpha says it's 365.242190419 days.

What you're suggesting, I think, is a calendar in which leap years are always either 4 or 5 years apart, and are as evenly distributed as possible, so that the difference between the calendar and the astronomical year are minimized.

To do this, start with a 365-day year, and keep track of the offset between the calendar the astronomical year. This offset increases by 0.242190419 days every year.

  • Year 0: offset = 0
  • Year 1: offset = 0.242190419 days
  • Year 2: offset = 0.484380838 days
  • Year 3: offset = 0.726571257 days
  • Year 4: offset = 0.968761676 days
  • Year 5: offset = 1.210952095 days
    • Add a leap day, recompute offset = 0.210952095 days
  • ...

Every time the offset exceeds 1 day, add a leap day and subtract 1 day from the offset.

This will keep the offset as small as possible over time, but at the expense of easy predictability; it becomes much more difficult for those who are not mathematically inclined to understand when the next leap year is going to be. And the calendar would presumably have to be adjusted as the number of days in a solar year is computed more precisely, or as it changes as the Earth's rotation rate changes slightly.

Assuming that the figure of 365.242190419 is correct, your calendar would repeat itself, not every 400 years, but every billion years.

An alternative would be to keep the Gregorian calendar's assumption of 365.2425 days per year, and just distribute the leap years more evenly through the 400-year cycle. For example, starting from 2000, you have leap years in 2000, 2004, 2008, 2012, ..., 2128, 2133, 2137, 2141, ..., 2265, 2270, 2274, ....

In either case, most of the time leap years would not be years that are multiples of 4, which is a nice property of the Julian and Gregorian calendars.

That's the math, but it's absolutely trivial compared to the politics. I'm afraid there's very little chance that such a system would be widely accepted. The Gregorian calendar, which was a clear improvement over the Julian calendar, was introduced in 1582, but it wasn't fully adopted worldwide until the late 1920s (and there are still pockets of resistance).

There are tremendous advantages in the fact that almost the entire world uses the Gregorian calendar, and it will remain within a day or so of the astronomical year for the next several thousand years. Your proposed calendar has the advantage of remaining very slightly closer to the astronomical year, but the costs of universal adoption would be tremendous, and the costs of partial adoption would be even worse.

  • $\begingroup$ As long as they keep adding(/subtracting) leap seconds, you don't need that caveat about "... for the next several thousand years" in the last paragraph $\endgroup$ Jan 3, 2012 at 0:10
  • $\begingroup$ @ThePopMachine: I don't think so. Leap days and leap seconds solve different problems. $\endgroup$ Jan 3, 2012 at 3:57

You need 97 leap days every four hundred years to achieve (exactly) the same precision as the Gregorian calendar.

If your year is Y, take Y*97/400 and round. The method of rounding is up to you, and the proper phase offset to match up best with the real calendar is up to you (and I think depends on the rounding method you pick).


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.