基于日期推算星期和历法由来

By admin in 亚洲必赢官网app on 2019年2月17日

太农历和阳历(儒略历与格里历) 以往世界上通用的历法——农历,有人曾张冠李戴地誉为“西历”。其实,究其根 源,那种历法并非发生于西方,而是产生于6000多年前的古阿拉伯埃及共和国。     古埃及(Egypt)气象炎热,立春稀少,不过农业生产却很强盛。这是怎么吗?原来那与新罕布什尔河 的时限泛滥有着密切的涉及。阿拉伯埃及共和国(The Arab Republic of Egypt)的一大半领土都以荒漠,唯有莱茵河流域像一条品绿的缎 带从南到北贯穿其间。直到现代,阿拉伯埃及共和国的的95%之上的总人口也都汇聚在那条深灰的人命带 中。因而,在希腊共和国(Ελληνική Δημοκρατία)时代,西方人便把阿拉伯埃及共和国誉为“长江送来的赠礼”。北魏阿拉伯埃及共和国人尤其将尼 罗河算得“阿姨河”。     长江全长6648英里,同北美洲的黄河、南美洲的莱茵河和南美洲的密苏里河并 称为世界最长的水流。     亚马逊河发源于赤道附近,主流叫白黄河,从乌干达流入苏丹,在喀土穆和发源于埃塞 俄比亚的青黄河集合,流入阿拉伯埃及共和国(The Arab Republic of Egypt)。     在阿拉伯埃及共和国国内,多瑙河年年6月开班涨水,7至10月是泛滥期,这时洪涝夹带着多量腐 殖质,灌满了二者龟裂的田地。多少个星期后,当山洪退去时,农田就留下了一层肥沃的淤 泥,等于上了两次肥。11月开展播种,第3年的3至4月得到。亚马逊河还有一个风味,那 就是年年的涨水基本是定时定量,虽有一定的进出,但距离不是太大,从没有洪水滔天淹没 一切的大灾。这就为古阿拉伯埃及共和国人最早制造大规模的水利工程灌溉系统和制定历法提供了便于。     古阿拉伯埃及共和国人为了不违农时,发展农业生产,渐渐认识到必须控制马里兰河溢出的原理,准确 地总结时间,那就必要有一种历法。他们在长久的生产实践中,积累了好多经验。     古埃及(Egypt)人察觉尼罗河每趟泛滥之间大致相隔365天。同时,他们还发现,每年6月的 某一天中午,当多瑙河的潮头来到前日开罗相邻时,天狼星与太阳同时从地平线升起。以此 为根据,古埃及(Egypt)人便把一年定为365天,把天狼星与太阳同时从地平线升起的那一天,定 为一年的起源。一年分为12个月,每月30天,年底加5天作为节日,那就是阿拉伯埃及共和国(The Arab Republic of Egypt)的阳光 历。     阿拉伯埃及共和国(The Arab Republic of Egypt)的公历将一年定为365天,与地球围绕太阳帝君转一圈的年月(回归年)比较 较,只相差百分之二十五天,那在即时曾经是一对一准确了。但是,一年相差肆分之一天不认为, 经过4年就相差一天。经过730年,历法上的时刻就比实际时间推进了5个月,冬天和春日 正好颠倒过来。再过730年,才能再次来到原先的源点。公元前46年,罗马主帅儒略·凯撒 (又译朱利乌斯·凯撒)决定以阿拉伯埃及共和国(The Arab Republic of Egypt)的阴历为蓝本,重新编辑历法。凯撒主持编制的历 法,被后人称为“儒略历”。     儒略历法对埃及(Egypt)太公历中年年约肆分之一天的误差,作了这么的调动:设平年和闰年, 平年365天,闰年366天。每4年置1个闰年。单月每月31天,双月底的2月平年2 9天,闰年30天,其他双月每月30天。     恺撒死后,他的后来人奥古斯都因为本人生在8月,便从2月首腾出一天加在8月上, 使8月也改为大月,即31天,同时相应把9、11多个月定为小月,10、12七个月定 为大月。经过如此的更动,各月的运气与今天采纳的公历基本相同了。公元325年,拉各斯 国王君士坦丁在两回教派会议上,规定儒略历为东正教的历法,但从没鲜明哪一年是它的起 点。到了公元6世纪时,佛教徒把500多年前东正教轶事的开拓者耶稣·基督诞生的那 一天,说成是公元元年。“公元”的拉丁文的趣味就是“主的生年”,用拉丁文A.D.表 示。在这一年之前,称为“公元前”,英文的意味是“基督在此此前”,用英文B.C.表示。     儒略历就算比阿拉伯埃及共和国(The Arab Republic of Egypt)的阴历进了一步,但回归年仍有11分14秒的误差,积128年 又要离开一天。儒略历在北美洲通达了1600多年,至16世纪下半叶,历法上的日子比回 归年迟了10天。比如,1583年的冬至应在3月21日,历法上却是3月11日。此 外,教会鲜明耶稣复活节,应在过立春月圆后的首先个礼拜4、由于小暑已离开10天之 多,耶稣终究在哪一天“复活”的,也成了难题。由此,对儒略历作进一步的改造,已经势 在必行。     奥克兰教皇格里高利十三世,在1582年团队了一批天国学家,根据哥白尼日心说计算 出来的数码,对儒略历作了修改。将1582年10月5日到14日里边的10天发布撤 销,继10月4日之后为10月15日,所以1533年的大雪又复归于3月21日;过去 将4年置1个闰年,400年累计100个闰年,以后改为400年中有97个闰年,从而 大体上弥补了11分14秒的误差。置闰的方法是:凡是逢百年那一年能够用400除尽的 就是闰年,除不尽的就不是(如:1600年是年,1700年、1800年、1900年 皆不是年,2000年是闰年)。后来人们将这一新的历法称为“格里高利历”,也等于今 天世界上所通用的历法,简称“格里历”或公历。     中中原人民共和国赤手空拳后,中心人民政坛下令,中国以格里历为国家历法,并行使公元纪 年,但不撤废旧历。     当然,格里历也不是尽善尽美的,每月的天数依旧犬牙交错,规则性不强,越发是每经 过两千几百年还会有一天的误差。随着生产的进化和天艺术学的进化,这一个老毛病将持续拿到改 进。 出处:http://www.nongli.com/sj5000/008.htm

 ====================================================

再谈星期的持筹握算

“让我们看看1752年十一月14号那么些周四吗,大家的公式最远只可以推算到这边了。”
              ——Kim S. Larsen

“从公元元年三月二十三日起头至今,天天都以连接的。”
                                         ——于鹏

“西方历法的第一,遍改良是布加勒斯特朱利乌斯·凯撒大帝引进的。他使用的四年一闰的闰年方式。由于一个太阳年不凑巧是365.25天,而是
365.242199…天。到16世纪,每年10分14秒的误差已经累积成10天,相当于历法上多了10天。于是教皇格利戈里八世举办了三回改进。他在1582年三月三日以教皇训令发表,将1582年七月7日至二十四日擦亮,并且对原来的闰年方法开展了校勘。经过校勘的历法叫格利戈里历法,也等于大家明日用的阴历。1752年,塞尔维亚人决定动用格利戈里历法,不过从1582年到那儿,历法又多出了1天,所以United Kingdom议会在1752年作出决定,抹掉11天——1752年1月17日至11二十5日。”

日期的范围是Kim S. Larsen算法的题材呢?不。
公元元年3月十七日开始到方今,每一日都以连连的吗?不。
二个粗略的艺术就足以证实上述事实——用Linux的cal命令。运转你的Linux在#升迁符下输入
cal  9  1752
您相会到:
    September 1752
    Su  Mo  Tu  We  Th  Fr  Sa
                  1   2   14  15  16
     17  18  19  20   21  22  23
     24  25  26  27   28  29  30
诙谐吧三个唯有19天的二月。
让我们来探视那三个算法,Kim S.
Larsen硕士的算法和于鹏同学的算法在真相上实际是一模一样的。只可是在贯彻的底细上略有不一致。倘诺让五个算法去统计同一天(无论在1752年3月十六日事先仍然后来)是星期几,二者的答案自然是相同的。让我们来分析一下呢。
先是,他们把日子对星期的操纵成效都分为年、月、日四个控制因素。对于年的要素,从双方的计算公式 
就能见到是同一的;对于日的因素,两者都是平昔计入,故也是一律的;而对于月的要素,Kim
S.
Larsen博士构造了二个公式,(三个可怜抢眼的公式,)通过以月份为自变量算出的函数值作为对星期的影响量。而于鹏同学利用了查表的法子,即先构造好1个以月份为索引的表对于相应的月度,通过查表得出其对星期的影响量。(以switch语句完成)不妨作如下演算:(为了一致起见,接纳一、九月作为上年的十三、十五月。那是贰个分外聪明的章程。)用于鹏同学的章程建表,并对7取模(表一)。再建立Kim
S. Larsen函数 的函数值表(表二)。很扎眼二者是一样的。

三月    0      0 | 三月    0 
四月    31    3 | 四月    3 
五月    61    5 | 五月    5 
六月    92    1 | 六月    1 
七月    122  3 | 七月    3 
八月    153  6 | 八月    6 
九月    184  2 | 九月    2 
十月    214  4 | 十月    4 
十一月 245  0 | 十一月 0 
十二月 275  2 | 十二月 2 
十三月 306  5 | 十三月 5 
十四月 337  1 | 十四月 1 

表一                      表二

附带,在拍卖闰年五月五日的难题上,两者的做法略有不相同,但效果如故一样的。Kim
S.
Larsen学士采纳的措施拾贰分精干,他把九月排在一年的终极,管她闰不闰,反正是最后一天。而于鹏同学加了一个if分支,直观有效。
济公不愧为大师,设计的算法简洁、漂亮;而于鹏同学的算法,简单易懂,并且效能并不差。
好了,该化解那么些“历史遗留难点”了。其实,并不曾什么数学公式能算出指定日期是星期几,大家得以试着凑合壹个,不过何必呢?加个if分枝不就缓解难点了啊?(Kim
S. Larsen算法+于鹏思想)对Kim S. Larsen
学士的程序作一些少不了的充裕,可收获突破1752年2月30日日子限制的C语言程序。
/*C++Builder5下编译通过*/
/*如果输入的是毋庸置疑的日子*/
#include <stdio.h>
char *name[] = { “Monday”,
              “Tuesday”,
              “Wednesday”,
              “Thursday”,
              “Friday”,
              “Saturday”,
              “Sunday”
               };
void main(){
  int D,M,Y,A;
  printf(“Day: “); fflush(stdout);
  scanf(“%d”,&D);
  printf(“Month: “); fflush(stdout);
  scanf(“%d”,&M);
  printf(“Year: “); fflush(stdout);
  scanf(“%d”,&Y);
  if ((M == 1) || (M == 2)){/*元月、一月看作二零一八年的十三、十一月*/
    M += 12;
    Y–;
  }
  if ((Y < 1752)||((Y == 1752)&&(M < 9))
             ||((Y == 1752)&&(M == 9)&&(D <
3)))/*看清是或不是在1752年七月3眼前*/
    A = (D + 2*M + 3*(M+1)/5 + Y + Y/4 +5) %
7;/*1752年八月3日前的公式*/
  else A = (D + 2*M + 3*(M+1)/5 + Y + Y/4 – Y/100 + Y/400) %
7;/*1752年10月二五日后的公式*/
  printf(“It’s a %s.\n”,name[A]);
}

出处:http://bbs.csdn.net/topics/10163840

==================================================

根据日期推算星期作者: 宋维业

     
记得几年前,有个新闻报导说,有个人纪念力很强,可以记住任意日期是星期几。

      小编深感不太可信,其实,那几个星期几是可以经过公式总括出来的。

其中一种名叫基姆拉尔森总结公式:

      公式是W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7

  在公式中d表示日期中的日数+1,m表示月份数,y表示年数。

  注意:在公式中有个与其余公式不相同的地点:

  把5月和八月同日而语是上一年的十九月和十九月,例:如若是二零零四-1-10则换算成:二〇〇一-13-10来代入公式总结。

 

还有蔡勒公式:

 

        W = [C/4] – 2C + y + [y/4]

  • [13 * (M+1) / 5] + d – 1

 

或者是:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

 

公式中的符号含义如下:
w:星期;
w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世纪-1(前两位数)
y:年(后两位数)
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的一,12月要作为上一年的1三,1二月来测算,比如二〇〇二年四月二十七日要作为二〇〇四年的1六月20日来总计)
d:日
[ ]意味着取整,即只要整数部分。

 

 

      别的,还有个工作,那么些公式只好计算1582年五月17日(含)之后的气象。

      原因是怎么着吧?

    在于今直通的历法记载上,满世界居然有十天没有任何人出生过,也没有任何人寿终正寝过,也没有爆发过大小值得纪念的人或事。那就是1582年七月二3五日至十月5日,持续时间为0。

 
事实上,近年来世界交通的农历中,就有持续时间为0的10天,即公元1582年3月二十二日至九日。事情是那样的:

 
西方历法的首先次改良是休斯敦朱利乌斯·凯撒大帝于公元前45年亲自引进的。当时利用的数字是一年365.25天,于是Julian历法成为最简便的历法:第1、、二、三年都是365天,三年结余的0.25天给第六,年,第4年就有366天,那就是闰年。于是再度365,365,365,366的周期,每年都是整数。

  然而,二个阳光年不凑巧是362.25天,而是
362.242199…天,每年相差13分14秒,相当于Julian历法中每年多算了11秒钟14秒。由于误差不太大,头几年没怎么关联,凯撒活着时影响还不大。不过,一年又一年,误差累积起来,Julian历法就与实际的阳光年不合拍了。例如每年白露在一月2九日内外,但多少个百年后,小寒在Julian历法上的日子越来越提前了,那对老乡种地不便民,对教会显然复活节在哪一天也牵动劳动。由于Julian历法是凯撒亲自制定的,上述情状对他的威信是1个沉重打击。

 
16世纪时,教皇格利戈里八世举行了一遍考订。因为到16世纪,每年拾分14秒已经累积成10天,约等于历法上多了10天,那对于分明复活节导致严重困难,不得不接纳措施补救。为此,格利戈里应用了解决此类难点的最古老最可行的策略—-他召集3个委员会,任命1个人智慧的主持人,即独立的耶稣会化学家克利斯多弗·克拉维斯(克里Stowe弗Clavius),须求委员会指出消除方案。委员会于1587年开端工作。

 
克拉维斯委员会合临七个例外的难题,它用区其他点子举行消除。第三,Julian历法将来走快了10天,必须拉回到与农历一致。克拉维斯提议用合法表明把那10天抹掉!教皇格利戈八世于1582年11月十日以教皇训令宣布,将1582年八月十四日至14抹掉,于是那10天就流失了,一去不归。1582年5月213日过完了,第叁,天已经是五月1十七日了,于是历法又回去与阴历同步。

 
当时以及后来有成百上千人对此感到惊愕,目瞪口呆,有人认为是荒唐、武断。“教皇一纸训令就能抹掉日历上的10天?”

 
不过,那10天实在不存在了,那10天什么也尚未暴发,那10天根本就没吃饭。假若你能找到当时的日志,1四月11日记完后,下一页就是5月1七日的事。用正确语言表明,那10天的持续时间为0。

 
其实完全不用多此一举。太阳年、太阳日与自然现象有关联,至于某一天是哪些日子,则是人工的,与给小朋友起名字如出一辙。大家可以不用农历,一年不分月,只叫第壹天,第1天,……第二25天,……到第壹65天,那是同意的。喜欢偶数的人方可表爱他美个“偶数日历”:四月三十一日,11月25日……十一月二十九日……四月15日,八月33日……,110月九日,那也是同意的,只要一年365天或者366天就行。那再一回注明,在2个没错理论或系统中不相同出由自然现象决定(由此必须符合实验)的一部分和人为规定的一对是根本的。

 
当然,那一个控制对当时的社会生存也会有肯定影响,例如出生在十月八日至1月二十九日的人在1582年找不到祥和的风水,但与落地在十一月14日的人相比,少过一年诞辰算不了什么。还有,那年5月份的薪酬、利息也会有标题,但不知当年的银行、报酬制度什么样。可是这个题材的影响微乎其微。

 
第三,个难点是亟需提议历法的互补规则,不让每年多出的十二分14秒累积得太多。于是克拉维斯委员会指出一年有365.2422天的方案,那比Julian历法的365.25天大大接近大自然运动实际。据此对Julian历法唯有“四年一闰”的简短规定举行勘误:四年一闰,可是世纪之交的’00年,如100年,200年,不闰,即每一百年少闰四次。那样一算,闰年又太少了,于是尤其规定:每七个百年的世纪之交,即400年,800年等仍是闰年。最后关于闰年的鲜明为,用4除尽的年份仍是闰年。教皇训令也认同了那个勘误。经过那三个改良的Julian历法叫格利戈里历法,约等于大家前几天用的阴历。由于格利戈里历法中的年与阴历仍有误差,还须要更进一步改进,不过两岸只相差25.96秒,每过2800年才相关一天,在骨子里生活中没什么影响。那样,一九〇三年不是闰年,但2000年是闰年,每400年才碰到一回!又3个特殊性!

 
格利戈里历法很快在休斯敦天主教势力范围被广大接受,可是在英帝国却引起了一片喧嚣的反对声,意大利人还是百折不挠Julian历法,拒绝“抹掉10天”。直到1752年,美国人才想通,理性终于占了上风,但是从1582年到那时,历法又多出了1天,所以大不列颠及北爱尔兰联合王国议会在1752年作出决定,抹掉11天—-1752年3月三日至11二十三日,至此才接受了格利戈里的改制。请留意,大不列颠及英格兰联合王国野史中,那11天什么也绝非暴发。因此可以看到,三回历法革新是多么不易于,对于2个聪明、合理的决定,仅仅因为看上去有点怪就有人反对,竟然花了快二百年才接受!

       附录1个基姆拉尔森统计公式C语言程序

#include “stdio.h”

void CaculateWeekDay(int y,int m, int d)
{
    if(m==1||m==2) {
        m+=12;
        y–;
    }
    int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
    switch(iWeek)
    {
    case 0: printf(“星期一\n”); break;
    case 1: printf(“星期二\n”); break;
    case 2: printf(“星期三\n”); break;
    case 3: printf(“星期四\n”); break;
    case 4: printf(“星期五\n”); break;
    case 5: printf(“星期六\n”); break;
    case 6: printf(“星期日\n”); break;
    }

void main()
{
    int year=0,month=0,day=0;
    printf(“请输入日期:\n格式为:1900,1,1\n”);
    char temp = ‘1’;
    while (temp != ‘0’)
    {
        scanf(“%d,%d,%d”,&year,&month,&day);
        scanf(“%c”,&temp);
        CaculateWeekDay(year,month,day);
        printf(“输入0退出,其他后续:”);
        scanf(“%c”,&temp);
    }
}

运作效果:
请输入日期:
格式为:1900,1,1
2008,4,29
星期二
输入0退出,其余后续:d
2008,1,1
星期二
输入0退出,其余后续:l
2008,8,8
星期五
输入0退出,其余后续:0
请按任意键继续. . .

(按照网络资料整理)

出处:http://blog.renren.com/share/112875057/8739219718

发表评论

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

网站地图xml地图
Copyright @ 2010-2019 亚洲必赢手机官网 版权所有