Возвращает true, если входной год представляет собой високосный год
Основной современный код дня:
If year mod 4 = 0, then leap year
if year mod 100 then normal year
if year mod 400 then leap year
else normal year
Сегодняшнее правило началось в 1582 году нашей эры.
Правило юлианского календаря с каждым 4-м годом начиналось с 46 г. до н.э., но оно не является последовательным до 10 г. н.э., как заявил Цезарь.
Тем не менее, они добавляли несколько високосных лет каждый третий год, а затем и в предыдущие годы:
Таким образом, високосные годы были 45 г. до н.э., 42 г. до н.э., 39 г. до н.э., 33 г. до н.э., 30 г. до н.э., 27 г. до н.э., 24 г. до н.э., 18 г. до н.э., 15 г. до н.э., 12 г. до н.э.
До года 45BC високосный год не добавлялся.
http://www.wwu.edu/depts/skywise/leapyear.html
Год 0 не существует таким, какой он есть ... 2BC 1BC 1AD 2AD ... для некоторых вычислений это может быть проблемой.
function isLeapYear(year: Integer): Boolean;
begin
result := false;
if year > 1582 then // Todays calendar rule was started in year 1582
result := ((year mod 4 = 0) and (not(year mod 100 = 0))) or (year mod 400 = 0)
else if year > 10 then // Between year 10 and year 1582 every 4th year was a leap year
result := year mod 4 = 0
else //Between year -45 and year 10 only certain years was leap year, every 3rd year but the entire time
case year of
-45, -42, -39, -36, -33, -30, -27, -24, -21, -18, -15, -12, -9:
result := true;
end;
end;