闰年的计算

转载 2013年12月02日 15:06:19

作为一个程序员,有时会碰到闰年的判断,那么到底神马是闰年呢,又为什么会有闰年这种说法呢。下面资料摘至WIKI:

一、闰年的定义

闰年是比普通年份多出一段时间的年份,在各种历法中都有出现,目的是为了弥补人为规定的纪年与地球公转产生的差异。

二、闰年的起因

若以阳历为例,“年”的计算基础是回归年,而一个回归年大约等于365.24220日。因为在平年西历只计算365日,结果四年后便会累积0.24220×4=0.9688日,大约等于一日,所以便逢四年增加一日闰日以抵销这0.9688日。 然而,累积4年后多的0.96876天,与真正的1日尚差0.03124天,故如果不间断地按照4年1闰的方式修正,百年后将累积成365×100+25=36525日,比真正的1世纪日数365.24219×100=36524.219多。因此历法学家便重新规定闰年的规则为:西元年份逢4的倍数闰、100的倍数不闰、400的倍数闰、4000的倍数不闰。例如:公元1992、1996年等为4的倍数,故为闰年;公元1800、1900、2100年为100的倍数,当年不闰;公元1600、2000、2400年为400的倍数,有闰;而公元4000、8000年为4000的倍数,则不闰。

三、闰年规则

目前使用的格里历闰年规则如下:
1.西元年份除以400可整除,为闰年。
2.西元年份除以4可整除并且除以100不可整除,为闰年。
3.西元年份除以4不可整除,为平年。
4.西元年份除以100可整除并且除以400不可整除,为平年
算法:

if (西元年份是400的倍数)闰年

else if (西元年份是4的倍&& 西元年份不是100的倍数) 闰年

else 平年


每逢闰年,2月份有29日,平年的2月份为28日。
因此,2057年为平年,2060年逢4的倍数为闰年,1900年逢100的倍数但非400的倍数故为平年,2000年逢400的倍数又为闰年。
此外,如依照现有太阳年的长度与上述闰年规则,每8000年又约差一日,因此约翰·赫歇尔提议每逢4000的倍数不闰,如公元4000年。但距此一年份来临尚有约二千年之遥,因此还未曾真正纳入规则或实施过。又由于地球公转速率的不稳定与众多影响因素,届时是否需要纳入此规则仍有疑问。



相关文章推荐

计算日子差。自由年月日。含闰年判断

计算日子差 自由年月日 闰年判断含

第三周作业-实现随机点名的签到程序和计算闰年的简单程序

1.计算闰年:判断某一年份是否为闰年。(如果这个年份能被4整除,但不能被100整除;或者,如果这个年份能被4整除,又能被400整除;满足以上两个条件中的一个的年份为闰年)。类名:LeapYear pu...

两个日期之间闰年数计算方法探索

近来需要计算两个日期之间的差值,想使用直接计算的方法来计算两个日期之间的差值,今天偶然发现了一个规律,于是记录下来,以共享,欢迎拥有更加好的算法朋友批评指正。

闰日闰年问题 大年份计算

1414 - February 29 PDF (English) Statistics Forum Time Limit: 1 second...

js日期处理---计算自然月、指定自然月某一天、获取前一天和后一天、判断闰年、当月最后一天日期、月末最后一天

最近被日期弄得很头疼,由于js的月份是比较特殊的[0-11],所以在月份计算上诸多不易。特地整理了日期一些方法。 首先,以下代码均有一个共同的日期格式化函数 //日期格式化 Date.prototyp...

闰年计算 汇编语言

  • 2010-01-14 13:45
  • 60KB
  • 下载

微机原理闰年计算

  • 2011-10-22 10:09
  • 94KB
  • 下载

一行代码判断闰年和计算某月份天数

在刚开始学习C++的时候,曾经封装过一个时间类,里面实现了一些接口,包括判断该年是否为闰年,计算某个月的天数,计算截止这个日期总共过了多少天等等。 可能很多人都C++初学者都写过这种东西,大多数人的...

闰年的计算

  • 2014-06-17 21:06
  • 526B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)