刚学编程那会,一直弄不明白为什么闰年的算法是下面这个样子:
(year%4==0&&year%100!=0)||(year%400==0)
以前也经常听:四年一闰百年不闰四百年再闰;
从来没深究过这个里面的根本原因;
直到最近才去深入剖析,对于平年和闰年的设置其实就是为了更精确的计算时间,是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。
1、维基百科的解释如下:
闰年是指该年有366日,即较平常年份多出一日。闰年是为了弥补因人为历法规定的年度天数365日和平均回归年的大约365.24219日的差距而设立的。不同历法有不同置闰方法。儒略历每4年置1闰日,平均1年是365.25日。格里高利历每400年少3次闰日,平均是365.2425日。多出来的一天为2月29日。
- 公元年份非4的倍数,为平年。
- 公元年份为4的倍数但非100的倍数,为闰年。
- 公元年份为100的倍数但非400的倍数,为平年。
- 公元年份为400的倍数为闰年。
每逢閏年,2月份有29日,平年的2月份為28日。
2、按照理解,具体推算方法如下:
历法规定为365天,实际地球绕太阳的公转周期是365天5时48分46秒(5时48分46秒 = 5*60*60+48*60+46=20926秒 20926/24*60*60=20926/86400=0.24219天),约为365.24219天,实际一年则多出约0.24219天,4年多出4*0.24219=0.96876天≈1天,因此4年设置1闰年,即加上少算的1天,闰年设置366天,但是如果依此方法,400年就有100个闰年,即100天,而实际400年地球公转日多出400*0.24219=96.876天≈97天,历法比实际多了3天,为了抵消掉这三天,国际历法组织规定,400年中需要少掉3个不闰年,这三个不闰年就规定在不能被400整除的世纪年中。