闰年是怎么回事?

闰年是一种修正累计误差的机制。

一年是365天零6小时左右, 这样算起来,每四年多一天零几分钟,而每过100年又会少一天左右,所以每四年有一个闰年,而到了世纪年,则要减少一个闰年,每400年又会有一个闰年, 比如 1896年就是一个闰年,1900年就不是闰年,而2000年又是一个闰年, 农业上的农时,是按照我国现在通用的公历和农历来制定的。公历一年为365天,逢到闰年为366天,因为平年2月份只有28天,闰年二月份就有29天。农历每年只有354天或355天;逢到有闰月的一年,就有384天或385天。因为农历一般每月只有29天或30天,逢到有闰月的年,就多一个月。 为什么公历有闰年,农历有闰月呢? 现今世界上各国通用的公历,是根据罗马人的“儒略历”改编而成的。天文学上把地球绕太阳从春分点回到春分点的时间,称为一个回归年,其长 年为365日,每四年有一个闰年为366日。到公元325年,儒略历为当时信奉基督教的国家所采用,这一年的春分日是3月21日。由于儒略历的平均历法年比回归年长0.0078平太阳日(即平均每年约长11分14秒),这样从公元325年开始,积累到1582年,两者相差竟达十天,结果3月21日的春分日提早到3月11日。为了避免这些误差,人们特规定1582年10月5日为1582年10月15日;并将设置闰年的办法,也给以明确规定:公历纪元为标准,凡是能被4整除的年是闰年;但逢百之年,能被4整除的并不是闰年,必须要能被400整除的才是闰年。例如1968年能被4整除,是闰年,1900年是逢百之年,能被4整除,却不能被400整除,所以不是闰年,而2000年又将是闰年。凡是闰年,在二月份增加一天,全年为366天。

现在还在使用的农历(又叫夏历),它的特点是:既重视月相盈亏的变化,又照顾寒暑节气。它规定大月30日,小月29日,因为月相变化一周的时间(天文学上叫做一个朔望月)是29.5306日。这样,几个月的平均值就近似于“朔望月”的长度。因此平年有12个月,全年只有354日或355日,与回归年平均约差10日21时。为了纠正这个误差,所以规定每三年中加一个闰月,五年中加两个闰月,十九年中共有七个闰月,以求年月的结合;这样农历的闰年共有13个月,全年有384或385日。通过这么巧妙的安排,使每月所代表的节气相差不致太大,不过农历的闰月不像公历总是规定在二月份;还有交节气的日子,不像公历那样大体上固定,它的计算也较复杂,平年与闰年的日数相差很多天,所以采用公历比农历普遍而便利。不过我们查一查《万年历》这本书,就可以清楚地知道农历哪一年是闰年,闰的是哪一个月了。 闰年(leap year),在公历(格里历)或夏历中有闰日的年份,以及在中国旧历农历中有闰月的年份。地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.2422 日,所余下的时间约为四年累计一天,于第四年加于2月,使当年的历年长度为366日,这一年就为闰年现行公历中每400年有97个闰年。夏历的平年只有354日,比12个朔望月短0.3671日,为使每月初一与月朔相合,规定每30年中有11年的年底增加1日,这一年的历年有355日,即为闰年。中国旧历农历作为阴阳历的一种,每月的天数依照月亏而定,一年的时间以12个月为基准,平年比一回归年少约11天。为了合上地球围绕太阳运行周期即回归年,每隔2到4年,增加一个月,增加的这个月为闰月。在加有闰月的那一年有13个月,历年长度为384或385日,这一年也称为闰年。 在中国传统的阴阳历中以朔月的长度29.5306日为1个月的平均值,全年12个月,同回归年的长度365.2422日相差约10日21时,需要置闰,使阴阳历各个月份和天象物候保持对应的关系。我国古六历中用3年闰1个月,5年闰2个月,19年闰7个月的闰月法,每逢闰年所加的月便称为“闰月”。闰月放在一年的年终,例如,秦代和西汉初期使用的《颛项历》,以十月为岁首,把九月做为年终,闰月就放在九月之后,而称为“后九月”。到了西汉初制定太初历时,把闰月分插在一年的各月,并规定以没有中气的那几个月作为闰月,月序仍用上个月的月序,只要称其为“闰某月”。这一置闰规则在采用平气的历法中最合理的。到清代的时宪历时,则改用定气注历,如继续单纯以没有中心置闰的规则,有可能一年要置两个闰月。因此,又补充规定:以两次冬至之间包含有13个月的定为闰年,闰年的第一个没有中气的月定为闰月。这一规则一直沿用至今。闰年中以闰四、五、六月最多,闰九、十月最少,闰十一月、十二月和正月则不会出现,至少在几千年内是这样的

 

闰年计算

1.能被4整除而不能被100整除.(如2004年就是闰年,1900年不是)

2.能被400整除.(如2000年是闰年)
算法

   public boolean isLeapYear(long year) {
            return ((year & 3) == 0) && ((year % 100) != 0 || (year % 400) == 0);
        }

解析

表达式(a&3)==(a%4)的值是1
因为无论a的值为多少a&3的结果只保留a的最后2位
如a的值为17,它变为二进制为10001,而3为00011,它们相与的结果只有a的1和2位数字保留下来也就是01,因为与1相与就保留原数据,与0相与就变0 如 a&1=a a&0=0
而a%4也是保留a的最后2位,因为只有最后2位的值为3,小于4,其它都>4
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值