闰年计算规则

不管学习哪种编程语言,有一个常见的练习题目就是根据闰年的计算方法,写出闰年计算的程序。

这个规则就是“四年一闰,百年不闰,四百年再闰”。

根据这个规则,只要年份是4的倍数且不能被100整除,或者是400的倍数,这一年就是闰年。我们很容易就可以写出下面的代码:

if((year % 4 == 0 && year % 100 !=0)|| year % 400 == 0)
	print(year + "年是闰年")
else
	print(year + "年是平年")

这就造成了一些特殊年份,会出现八年一闰的现象。比如1896年为闰年,四年之后的1900年并不是闰年,而要再过四年之后的1904年才是闰年。也就是一般情况下,年份能被4整除就是闰年,而整百的年份要能被400整除才为闰年。

但这种方法,只能说是一种简化的处理方法。为什么说是简化了的,则必须了解清楚闰年产生的原理。

闰年产生原理

闰年的产生原理很简单,如果地球绕太阳一周如果恰好就是365天,那就不需要闰年这种东西了。但不凑巧的是,地球绕一周需要约365.2422天(365天5小时48分45.5秒,365又10463/43200天),我们现行的时间体系没法使一年等于一个存在小数的天数,只好把小数部分暂时存起来,攒成整数后再拿出来过掉,这就是闰年的原理。

但这约365.2422天(365又10463/43200天)也很尴尬,如果绕一周需要365.25天,那每4年正好多出1天,那就太棒了。可这0.2422天怎么处理?365 又10463/43200天,每年都多10463/43200天。这意味着每过43200年应当补上10463天,也就是10463个闰年,这才完美的时间系统跟上天文系统。

但实际中上述43200年10463闰的方法过于变态。为了我们的生活方便,我们暂且按每4年一闰来补上少过的时间,这样计算:1-0.2422×4=0.0312,可见每四年一闰又会导致四年后我们的时间过快了0.0312天。那过了400年后,我们的时间会过快了3.12天。为了避免出现过快3.12天,所以才加上了我们前边提到的“百年不闰,四百年再闰”的特殊规定。

用“百年不闰,四百年再闰”的方法,使3.12天的误差成功缩短到了0.12天(每四百年少闰3个),每400年会产生0.12天的误差,这已经是很小了。可把这0.12天的误差放到历史的长河中,它也会逐渐变大。可以预见用“百年不闰,四百年再闰”的方法,3200年后,这0.12天的误差会被放大到接近1天(约0.96天)。因此在公元3200年,虽然这一年能够被400整除,但本该闰年的这一天变为平年。

在历法研究中,对闰年的处理有着全面的处理,公元3200年不是闰年而是平年。接下来的时间节点是公元153600年(闰年)、公元36864000年(平年)……但我们日常生活中往往涉及的时间跨度有限,且上千、上万年的跨度中,地球绕太阳的实际时间情况会发生微小变动。因此一般书籍资料中对闰年的判断直接采用了“四年一闰,百年不闰,四百年再闰”的简略方法。

▍一些万年历对3200年标注为闰年是错误的,多是其编程方法用了简单的闰年判断。

精确计算方法

一年的时间(地球绕太阳公转周期),精确到秒(天文观测)是:

365天5小时48分45.5秒 = 365.24219328703703703(703的循环…)天

如果 4 年一闰,平均每年就是:365+1/4=365.25 天

再每 100 年不闰,平均每年就是:365+1/4-1/100 =365.24 天

再每400年一闰:365+1/4-1/100+1/400 =365.2425 天

再每3200年不闰:365+1/4-1/100+1/400-1/3200 =365.2421875 天

再每 172800年闰:365+1/4-1/100+1/400-1/3200+1/172800 =365.24219328703703703(703的循环…)天

终于逼近观测结果了,因而就有了闰年的种种规定,所以 1900 年很不幸被排除掉闰年的身份。

参考:

微信公众号【地图看世界】

https://mp.weixin.qq.com/s?__biz=MzI2ODU4MDcwOQ%3D%3D&mid=2247484633&idx=1&sn=54cc951e2d384e3f973679e33d73ab83&scene=45#wechat_redirect

CSDN博主「车子 chezi」

https://blog.csdn.net/longintchar/article/details/121599345