上大学时学编程,老师和教材都告诉我,闰年的判断有两个原则:
1)能被4正确,且不能被100整除,则是闰年;
2)能被400整除,则是闰年。
今年看了一个python闰年判断的代码,惊得下巴都掉地上了。代码如下:
year = int(input("Enter a year: "))
# Display its status.
if year % 4 != 0 or (year % 100 == 0 and year > 1582 and year % 400 != 0):
print(year, "is not a leap year.")
else:
print(year, "is a leap year.")
代码里面竟然出现了一个1582!赶紧网络搜索了下。
我们现在使用所谓公历,其前身是儒略历,由罗马共和国独裁官儒略·恺撒采纳埃及亚历山大的希腊数学家兼天文学家索西琴尼计算的历法。始于公元前46年,它是一种纯粹的太阳历。在儒略历当中,规定一年12个月,单数月为大月,31天;双数月为小月,30天。但这样一年就是366天,和实际观察差别较大,于是必须从某一个月去除1天。据传罗马时代2月处决死刑犯,为了体现统治者的仁慈,于是就从2月去除1天,这样2月就是29天。
儒略·恺撒的侄子屋大维于公元前27年继位,继位后他发现僧侣将凯撒“每隔3年一闰”理解成了“每3年一闰”,此时已经多闰3年。为拨乱反正,屋大维宣布公元前8年到公元后4年不再置闰。从公元后8年重新施行。为褒奖自己,屋大维便从2月中再拿出一天,加入到自己出生的8月,并顺次对调了后面的大小月;同时将八月改成了自己的奥古斯都皇帝(AugustusCaesar)的名字, 叫做August。
平均起来,儒略历每年是365.25天。但和现代观察一回归年大约是365.2422,这样到1582年,偏差已经达到了10天,严重的影响了当时的农业生产。当时的教皇格里高利十三世采用的一种简单粗暴的办法,直接把1582年10月5日至14日去除,以抹平误差。
为消除以后再出现此问题,每100年去掉1个闰年,但每400年当年依然是闰年。这样每400年天数为365.25×400-3=146097天,每年平均是146097/400=365.2425。非常接近当前天文观察,且处理方法较为简单,便固定下来。此历法即格里高利历,也就是现在所谓的公历。