澳门新匍京客户端下载 2

澳门新匍京客户端下载:中国农历为什么会闰年,日历查询的算法

流言: “Don’t throw away what can be used again even an old calendar
becomes new again every 28
years”你知道日历每隔28年就是相同的吗?如果还喜欢挂日历的,不如重复利用吧,很环保!

大家都知道,在中国农历都会出现到闰年,而中国的农历是一个阴阳历,也是结合了阴历和阳历的历法哦,而对于闰年的出现,也是出现到农历年的年头和年尾就各有一个立春,就是俗称的两头春。而对于闰年到底是怎样回事的呢?而在农历为什么会出现到闰年的,一起来看看中国农历为什么会闰年吧。澳门新匍京客户端下载 1
为什么中国农历的闰年要多一个月
中国的农历是一种阴阳历。阴阳历是结合了阴历和阳历的历法,它以朔望月作为历法中月的单位,又使历年的平均长度尽可能接近回归年的长度。为此,在某些年中加进1个整月,以使若干年内的平均年长接近回归年。添加的这个月份称为闰月,加有闰月的这一年称为闰年,阴阳历的闰年有13个月。中外的阴阳历都有19年7闰的原则,也就是在19年中加进7个整月,使得19个阴阳历年的日数与19个回归年的日数相当接近。因此,添加闰月是阴阳历中的阳历成分。
阴阳历的年长有时354日,有时384日,与公历日期和节气相对应的阴阳历日期不固定,使用起来很不方便。例如,中国农历的大年初一,即春节,有时在公历的1月下旬,有时在公历的2月上旬或中旬,前后相差几乎可达1个月。因此就可以理解,为什么农历有时一年里都没有立春这个节日,有时又有两个立春。
例如,农历某年春节在公历的2月6日,因为立春基本固定在2月4日,所以以这个春节开始的农历年的起初没有立春;如果这个农历年不是闰年,那么这年的农历除夕便落在公历下一年的1月下旬,正在立春之前,所以这个农历年的年尾也没有立春。于是,这个农历年里就没有立春。
相反的情况是,农历某年春节在公历的1月下旬或2月初,而且这个农历年适逢闰年,那么这年的大年三十便落在公历下一年的2月中旬,已在下一年的立春之后。于是,这个农历年的年头和年尾就各有一个立春,就是俗称的两头春。
中国农历为什么会出现闰年? 闰年(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日,这一年也称为闰年。
按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来,因此,每四百年中要减少三个闰年。所以规定,公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的就是平年
关于闰年 闰年
关于公历闰年是这样规定的:地球绕太阳公转一周叫做一回归年,一回归年长365日5时48分46秒。因此,公历规定有平年和闰年,平年一年有365日,比回归年短0.2422日,四年共短0.9688日,故每四年增加一日,这一年有366日,就是闰年。但四年增加一日比四个回归年又多0.0312日,400年后将多3.12日,故在400年中少设3个闰年,也就是在400年中只设97个闰年,这样公历年的平均长度与回归年就相近似了。由此规定:年份是整百数的必须是400的倍数才是闰年,例如1900年、2100年就不是闰年。
我们居住的地球总是绕着太阳旋转的。地球绕太阳转一圈需要365天5时48分46秒,也就是365.2422天。为了方便,一年定为365天,叫做平年;这样每过四年差不多就要多出一天来,把这一天加在2月里,这一年就有366天,叫做闰年。
通常,每四年里有三个平年一个闰年。公历年份是4的倍数的,一般都是闰年。
按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来,因此,每四百年中要减少三个闰年。所以规定,公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的就是平年。
也就
我们居住的地球总是绕着太阳旋转的。地球绕太阳转一圈需要365天5时48分46秒,也就是365.2422天。为了方便,一年定为365天,叫做平年;这样每过四年差不多就要多出一天来,把这一天加在2月里,这一年就有366天,叫做闰年。
通常,每四年里有三个平年一个闰年。公历年份是4的倍数的,一般都是闰年。
按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来,因此,每四百年中要减少三个闰年。所以规定,公历年份是整百数的,必须是400的倍数的才是闰年,不是400的倍数的就是平年。
也就是我们通常所说的: 四年一闰,百年不闰,四百年再闰。

这个简单的计算告诉我们计算星期的一个基本思路:首先,先要知道在想算的日子之前的一个确定的日子是星期几,拿这一天做为推算的标准,也就是相当于一个计算的“原点”。其次,知道想算的日子和这个确定的日子之间相差多少天,用7除这个日期的差值,余数就表示想算的日子的星期在确定的日子的星期之后多少天。如果余数是0,就表示这两天的星期相同。显然,如果把这个作为“原点”的日子选为星期日,那
么余数正好就等于星期几,这样计算就更方便了。

“28年一轮回”是怎么一回事?

由于一年有 365 天,而 365 除以 7 等于 52 余 1(也就是说一年里有 52
个星期零一天),因此“明年今日”的星期通常就是在今年的星期上加一。如果是闰年的366天,会余下2天,就要在前一年的星期数上加二。四年里会出现三个平年和一个闰年,因此每过四年后星期数就会顺移五天。那么,过了
7 个四年,也就是 28 年后,星期数将会移动 35 天。由于 35 正好是 7
的整倍数,因此星期数正好又移了回来,完成了一个循环。所以说,28
年一循环的说法并不是完全没有道理。

不过,我们的历法中还有一个不可忽视的问题——置闰。大家知道,由于一年并不是整整
365 天,而是 365 又四分之一天,因此按照每年 365
天来算,每过四年就会少一天,闰年便应需而生。但其实,每年也并非刚好 365
又四分之一天,精度高一点应该是365.242199
天——当然,你还可以进一步提高精度。也就是说,每四年其实有 365.242199 × 4
≈ 1460.97 天,增加闰日会“矫枉过正”,让历法里多出 0.03 天来。这 0.03
天看上去关系不大,但每过 400 年就会多出整整 3 天,不得不需要
再修正一下。因此,我们的历法里还加了一条特殊的规定:如果年份的末两位是
00,则必须看它的前两位能不能被 4 整除。这样一来, 1700、1800、1900
都不能算作是闰年了,只有 1600、2000
这样的年份才能算闰年。这种规定可以从每 400
年里减少三个闰年,和实际情况就大致相符了。

由于 28 年一循环的说法是以“四年一闰”为前提,因此它只在这 100
年里有用,逃不过整百年的干扰。到了 2100 年,28
年的循环就被破坏掉了——因为 2100 年不是闰年,因此那年的年历和 2072
年不可能一样。也就是说,从现在算起,还轮不到 4 个循环,就会出现破绽。

闰年规律本身是 400 年一轮回,年历周期至少也得是 400 的整倍数。由于 400
年共有 146097 天,正好是 7 的倍数,因此 400 年恰恰也是年历的最小周期了。

在日常生活中,我们常常遇到要知道某一天是星期几的问题。有时候,我们还想知道历史上某一天是星期几。通常,解决这个方法的有效办法是看日历,但是我们总不会
随时随身带着日历,更不可能随时随身带着几千年的万年历。假如是想在计算机编程中
计算某一天是星期几,预先把一本万年历存进去就更不现实了。这时候是不是有办法通
过什么公式,从年月日推出这一天是星期几呢?

低碳无极限

不过,为了省纸低碳,你并不需要攒够 400 年的年历。事实上,你甚至连连续 28
本年历都不需要攒齐。由于“这一年的第一天是星期几”以及“这一年是否是闰
年”这两个问题就足以确定整年年历的模样,因此本质上不同的年历只有 7×2=14
种。如果用最深色表示 1 月 1 日星期一的年历,以此类推,最浅色表示 1 月 1
日星期天的年历,再加红色表示闰年,下图中所示的就是今后 980 年的年历模式
(每 28 年一行)。可以看出,28 年循环确实只能维持一阵,400
年的循环才是王道。不过不管怎样,这 14 种年历已经完全足够了。

澳门新匍京客户端下载 2

当然了,以上讨论都只是考虑了公历。如果加上我国的农历,情况就更复杂。要想重复利用28年前的日历就不可能了。

结论:部分正确。 日历 28 年一循环的说法只在 100 年里有用。400
年才是公历年历的最小周期。而本质上不同的公历年历只有 14
种,为了省纸低碳,只需要攒齐这 14 种就可以了。

月 份:1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

天 数: 31 28(29) 31 30 31 30 31 31 30 31 30 31

如果把这个天数都减去28(=4*7),不影响W除以7的余数值。这样我们就得到另一张
表:

真相:
响应环保号召,追求低碳生活。“重复利用”是个不错的主意,不过“日历每隔28年就是相同”的说法不准确。想要低碳?嗯。。。还能更低碳。

月 份:1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

剩余天数: 3 0(1) 3 2 3 2 3 3 2 3 2 3
平年累积: 3 3 6 8 11 13 16 19 21 24 26 29
闰年累积: 3 4 7 9 12 14 17 20 22 25 27 30

仔细观察的话,我们会发现除去1月和2月,3月到7月这五个月的剩余天数值是3,2,3,2,3;8月到12月这五个月的天数值也是3,2,3,2,3,正好是一个重复。相应的累积天数中,
后一月的累积天数和前一月的累积天数之差减去28就是这个重复。正是因为这种规律的
存在,平年和闰年的累积天数可以用数学公式很方便地表达:

╭ d; (当M=1)
D = { 31 + d; (当M=2) (3)
╰ [ 13 * (M+1) / 5 ] – 7 + (M-1) * 28 + d + i. (当M≥3)

其中[…]仍表示只取整数部分;M和d分别是想算的日子的月份和日数;平年i=0,闰年
i=1。对于M≥3的表达式需要说明一下:[13*(M+1)/5]-7算出来的就是上面第二个表中的
平年累积值,再加上(M-1)*28就是想算的日子的月份之前的所有月份的总天数。这是一
个很巧妙的办法,利用取整运算来实现3,2,3,2,3的循环。比如,对2004年5月1日,有:

D = [ 13 * (5+1) / 5 ] – 7 + (5-1) * 28 + 1 + 1
= 122,

这正是5月1日在2004年的累积天数。

假如,我们再变通一下,把1月和2月当成是上一年的“13月”和“14月”,不仅仍
然符合这个公式,而且因为这样一来,闰日成了上一“年”(一共有14个月)的最后一
天,成了d的一部分,于是平闰年的影响也去掉了,公式就简化成:

D = [ 13 * (M+1) / 5 ] – 7 + (M-1) * 28 + d. (3≤M≤14) (4)

上面计算星期几的公式,也就可以进一步简化成:

W = (Y-1) + [(Y-1)/4] – [(Y-1)/100] + [(Y-1)/400] + [ 13 * (M+1)
/ 5 ] – 7 + (M-1) * 28 + d.

因为其中的-7和(M-1)*28两项都可以被7整除,所以去掉这两项,W除以7的余数不变,
公式变成:

W = (Y-1) + [(Y-1)/4] – [(Y-1)/100] + [(Y-1)/400] + [ 13 * (M+1)
/ 5 ] + d.(5)

当然,要注意1月和2月已经被当成了上一年的13月和14月,因此在计算1月和2月的日子
的星期时,除了M要按13或14算,年份Y也要减一。比如,2004年1月1日是星期四,用这个公式来算,有:

W = (2003-1) + [(2003-1)/4] – [(2003-1)/100] + [(2003-1)/400] +
[13*(13+1)/5]

  • 1
    = 2002 + 500 – 20 + 5 + 36 + 1
    = 2524;
    2524 / 7 = 360……4.这和实际是一致的。

公式(5)已经是从年、月、日来算星期几的公式了,但它还不是最简练的,对于年份的处理还有改进的方法。我们先来用这个公式算出每个世纪第一年3月1日的星期,列表如下:

[…]表示只取整数部分。第一项表示需要加上被4整除的年份数,第二项表示需要去掉被100整除的年份数,第三项表示需要再加上被400整除的年份数。之所以Y要减一,这
样,我们就得到了第一个计算某一天是星期几的公式:

这个结果的第一项是一个7的倍数,除以7余数为0,因此(Y-1)*365除以7的余数其实就等于Y-1除以7的余数。这个关系可以表示为:

其中D是这个日子在这一年中的累积天数。算出来的W就是公元前1年(或公元0年)12月31日到这一天之间的间隔日数。把W用7除,余数是几,这一天就是星期几。比如我们来算2004年5月1日:

(Y-1)*365 = (Y-1) * (364+1)
= (Y-1) * (7*52+1)
= 52 * (Y-1) * 7 + (Y-1),

显然,W这么大的原因是因为公式中的第一项(Y-1)*365太大了。其实,

您可能感兴趣的文章:

  • 很好用的js日历算法详细代码
  • JavaScript
    blog式日历控件新算法
  • js实现日历的简单算法
  • ASP中通过该日历算法实现的具体代码
  • C++算法系列之日历生成的算法代码

如何计算某一天是星期几?
—— 蔡勒(Zeller)公式
历史上的某一天是星期几?未来的某一天是星期几?关于这个问题,有很多计算公式(两个通用计算公式和一些分段计算公式),其中最著名的是蔡勒(Zeller)公式。即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签:

相关文章

网站地图xml地图