當前位置:首頁 » 半夜時分 » 為什麼時間計算和月份計算不同

為什麼時間計算和月份計算不同

發布時間: 2022-12-28 08:51:24

⑴ 為什麼全球時間不是統一的 但月份卻是統一的

因為時分秒時間的基礎單位,年月日這是時間的統計單位,兩者根本不是一回事,應該說全球的時間是統一的,但是各國的月份並不是都按照公元紀年來計算的,比如伊朗俄羅斯,還有伊斯蘭教國家,中國的農歷這些月份和公元紀年的月份都是不同的。

⑵ 誰知道為什麼國內外的年份月份和時間都用12來計算啊

中國上古,根據不同的農業牧業生產情況需要,分別產生過太陽歷法和太陰歷法。
所謂的太陰歷法,就是古代天文學們先將地球看成為是靜止點,然後,再根據日晷測影確立一年為365·25個太陽日,再根據這個太陽年的參考系,去確立每太陽年365·25天內,月亮饒地球所轉的圈數,及其根據月亮圓缺周期,去將每太陽年分段成多少個「月」和每月多少「日」。這樣,就產生出了我們現在使用的農歷的雛形,即,每太陽年有12個月左右,每個月有30天。

周朝的歷法是太陽歷法,就是根據日晷測影,先將地球看成為是靜止點,然後,再將365·25天分成「春、夏、秋、冬」四季、「寒、風、緩、熱、雨、干」六季、「藏、生、長、化、成、收」六節氣。由此可見,周朝歷法,重要是根據地球上動植物的生長周期去確定季節劃分的。

無論夏歷法還是周歷法,他們都以12地支為歷法的數學劃分標准,這種以土地為標準的數學理念,反映了當時人們非常重視農業生長周期和動植物生長周期,這種以地為本的價值理念,直到今天依然流行在中國政治、經濟和文化習俗中。

陰陽歷法是先將地球視為是靜止參考點,太陽饒地球一周,月亮饒地球運行12·33周。太初歷充分考慮到了太陽和月亮的復合運作周期都會對農業和魚牧業有很大影響,而人們對月亮周期的觀察則又可以直接計算出循環的日數,所以,陰陽歷法按照月亮相對於地球的朔望四個周期,即,人們直接在晚上可觀察到的月亮的上弦(夏歷月初八)、望(夏歷月十五十六)、下弦(夏歷月二十三)、朔(夏歷月初一)的四個周期區間,再參照於此相對應的28個星象情況,將一個朔望月分成四個「星期」,每一「星期」可以觀察到七個星象,在這樣的復合運動關系下,每月的太陽日數就是29日12小時44分2秒8。為了確保人們根據月亮的圓缺情況,也就是確保人們觀察到的月亮最圓的時候是每月的十五和十六這兩天,所以,落下閎等人參照早期夏歷和自己觀測出的月亮和太陽的復合運動周期情況,設立了閏月,即每19年設立7個閏月,以確保人們可以根據月亮的圓缺去判斷每月的日數情況。

⑶ 古今每月的時間計算不同,古代每月是多少天

首先我們先來了解一下古代人們是怎麼進行時日的計算的。我們現在所知道古代最為常用的歷法是陰歷了,甚至一直沿用至今,許多中國傳統節日都是根據陰歷的日子來定的,比如:春節、中秋、重陽節等等……下面我先介紹一下陰歷的記日原理。

陰歷一個月平均有29.5天,所以陰歷的大月有30天,小月有29天。然後陰歷當中就會分平閏年,平年一年354或355天,個別年份是353天;閏年有13個月,閏月不確定,根據前一個月命名,比如前一個月是六月那閏月就叫閏六月,全年383或384,個別年份385天。

⑷ 為什麼有些孕婦在計算懷孕時間的時候是用周而不是用月

母親對孩子的愛,辛苦懷孕十月的分娩和母乳喂養都需要極大的勇氣,醫生幫助計算孕周和分娩日期。由於大多數人很難記住或確定懷孕日期,通常採用的計算方法是從最後一次月經的第一天開始計算。根據最後一次月經日期計算的分娩期,實際上以最後一次月經的那一周為懷孕的第一周。

胎盤和臍帶也參與供應。羊水的存在是為了給胎兒和母親提供一個相對柔軟的介質,防止胎兒受到外界的影響,減輕對母親造成的不適。產後用羊水沖洗可有效預防感染。許多人不明白為什麼要用羊水沖洗,有些人乾脆忘記了這一聯系。羊水中的物質可以幫助胎兒有效抵抗微生物,並將其保持在安全的環境中。

⑸ 為什麼要用時間和日期來-計算時間如--一天、一個月、和一年拜託各位了 3Q

地球時間是通過地球自轉與公轉得出來的,不是憑空生有的。一天24小時是地球自轉的時間,地球24小時自轉一周,一年為公轉時間。星期和月是通過地球的衛星——月球來推算的。時間是永遠流失的,只不過用不同的單位進行比較而已。就算人類社會不再有年,月,日的話,也會用其他的單位來代替。

⑹ 我國現行的計算年月日的時間有兩種:即陰歷和陽歷.請簡要說明這兩種方法的區別

通俗的講:
陽歷就是日歷中講的幾月幾日。也就是上學上班等所按照的日歷。
陰歷就是平常講的幾月初幾,或者是算節氣或者傳統節日時所按照的日歷。

若要知道陽歷與陰歷的科學解釋,下面附上網路網址:
陽歷:http://ke..com/view/284.htm
陰歷:http://ke..com/view/23598.htm

⑺ excel表計算兩個日期之間的月份數為什麼少一個月

少了當月的月數。
公式計算的是兩個日期之間間隔的,算當月的話公式再加1。選中目標單元格,輸入公式:=DATEDIF(A2,B2,「m「),按回車鍵確認,就能得到A2和B2兩個單元格日期之間間隔的月數。

⑻ EXCEL計算月內日期的公式為何不對

判斷條件中A<B<C這樣的寫法是不對的,電腦對這樣的例子的理解和我們不同,請看:

計算機認為1<2<3的判斷結果是假,計算機先判斷前面兩個數,然後把結果再和第三個數進行比較,因此1<2<3的求值過程是TRUE<3、FALSE

⑼ 每個月的天數為什麼不一樣

月事以月相變化的周期計算的,所以會不一樣。

月是歷法中的一種時間單位,傳統上都是以月相變化的周期作為一個月的長度,一個月(太陰月)的長度大約是29.53日,即一輪「朔望月」。

在舊石器時代的早期,人類就已經會依據月相來計算日子。迄今,朔望月仍是許多歷法的基石。一年分為12個月;中國農歷一年也為12個月,農歷的閏年為13個月,多出的一個月稱為閏月。

(9)為什麼時間計算和月份計算不同擴展閱讀:

月亮歷以月亮繞地球公轉的周期為計算的基礎的,要求歷法月同朔望月(月亮繞地球公轉一周)基本符合。朔望月的長度是29日12小時44分2.8秒,即29.530587日,兩個朔望月大約相當於地球自轉59周,所以陰歷規定每個月中一個大月30日,一個小月29日,12個月為一年,共354日。

由於兩個朔望月比一大一小兩個陰歷月約長0.061日(大約88分鍾),一年要多出8個多小時,三年要多出26個多小時,即一日多一點。為了補足這個差距,所以規定每三年中有一年安排7個大月,5個小月。

這樣,陰歷每三年19個大月17個小月,共1063日,同36個朔望月的1063.1008日,只相差約2小時25分9.1秒了。陰歷年同地球繞太陽公轉毫無關系。

由於它的一年只有354日或355日,比回歸年短11日或10日多,所以陰歷的新年,有時是冰天雪地的寒冬,有時是烈日炎炎的盛夏。今天一些阿拉伯國家用的回歷,就是這種純陰歷。

⑽ 為什麼每個月的天數不一樣

現行的公歷是格利戈里歷法,這個歷法的是1582年教皇格利戈里根據愷撒大帝引進的演算法改進的。它採用的是閏年制也就是現行的制度,不過有一個需要注意的地方就是,這個歷法並不是連續的,中間缺少了11天。1752年9月2日之後的那一天並不是1752年9月3日,而是1752年9月14日。也就是說,從1752年9月3日到1752年9月13日的11天並不存在。抹掉這11天是由英國議會做出的決定。所以要計算某年每個月的天數的,除了要考慮是否是閏年以外,還要考慮1752年的9月。
http://www.chinaunix.net/jh/4/646597.html
-------------------------
公元元年的第一天,也就是公元1年1月1日。具體:公元1年1月1日是星期六。
---------------------
太陽歷又稱為陽歷,是以地球繞太陽公轉的運動周期為基礎而制定的歷法。太陽歷的歷年近似等於回歸年,一年12個月,這個「月」,實際上與朔望月無關。陽歷的月份、日期都與太陽在黃道上的位置較好地符合,根據陽歷的日期,在一年中可以明顯看出四季寒暖變化的情況;但在每個月份中,看不出月亮的朔、望、兩弦。
如今世界通行的公歷就是一種陽歷,平年365天,閏年366天,每四年一閏,每滿百年少閏一次,到第四百年再閏,即每四百年中有97個閏年。公歷的歷年平均長度與回歸年只有26秒之差,要累積3300年才差一日。

現行公歷的產生、變化和發展

目前通行世界的公歷,是我們大家最熟悉的一種陽歷。這部歷法浸透了人類幾千年間所創造的文明,是古羅馬人向埃及人學得,並隨著羅馬帝國的擴張和基督教的興起而傳播於世界各地。

公歷最早的源頭,可以追溯到古埃及的太陽歷。尼羅河是埃及的命根子,正是由於計算尼羅河泛濫周期的需要,產生了古埃及的天文學和太陽歷。七千年前,他們觀察到,天狼星第一次和太陽同時升起的那一天之後,再過五、六十天,尼羅河就開始泛濫,於是他們就以這一天作為一年的開始,推算起來,這一天是7月19日。 最初一年定為360天,後來改為365天。這就是世界上第一個太陽歷。後來他們又根據尼羅河泛濫和農業生產的情況,把一年分為三季,叫做洪水季、冬季和夏季。每季4個月,每月30天,每月里10天一大周,五天一小周。全年12個月,另加5天在年尾,為年終祭祀日。

這種以365天為一年的歷年,是由於觀測天狼星定出來的,叫天狼星年。 它和回歸年相差約0.25天,因而在日歷上每年的開始時間越來越早,經過1461個歷年,各個日期再次與原來的季節吻合,以後又逐漸脫離。看起來,天狼星年好象在回歸年周期左右徘徊,因而又叫它為徘徊年、游移年,1461年的循環周期被稱為天狼周期。

後來,埃及人通過天文觀測,發現年的真正周期是365.25日,但僧侶們為了使埃及的節日能與祭神會同時舉行,以維護宗教的「神聖」地位,寧願保持游移年。後來出土了一塊石碑,上面有用埃及文和希臘文所寫的碑文,記載了歐吉德皇帝在公元前238年發布的一道命令: 每經過四年,在第四年的年末五天祭祀日之後、下一年元旦之前,再加一天,並在這天舉行歐吉德皇帝的節日慶祝會,以便讓大家記住。歐吉德皇帝校正了以前歷法的缺陷,這增加一天的年叫定年,其它年叫不定年。

古羅馬人使用的歷法經歷了從太陰歷到陰陽歷、陽歷的發展過程。羅馬古時是義大利的一個小村,羅馬人先是統一了義大利,而後又成為地跨歐、亞、非三洲的大帝國。最早,古羅馬歷全年10個月,有的歷月30天,有的歷月29天(這十分類似太陰歷),還有70幾天是年末休息日。羅馬城第一個國王羅慕洛時期,各月有了名稱,還排了次序。全年10個月,有的月30天,有的月31天,共304天,另外60幾天是年末休息日。以羅馬城建立的那一年,即公元前753年作為元年,這就是羅馬紀元。某些歐洲歷史學家直到17世紀末還使用這個紀年來記載歷史事件。

第二個國王努馬,參照希臘歷法進行了改革,增加了第十一月和第十二月,同時調整各月的天數,改為1、3、5、8四個月每月31天,2、4、6、7、9、10、11七個月每月29天, 12月最短,只有28天。根據那時羅馬的習慣,雙數不吉祥,於是就在這個月里處決一年中所有的死刑犯。這樣,歷年為355天,比回歸年少10多天。 為了糾正日期與季節逐年脫離的偏差,就在每四年中增加兩個補充月,第一個補充月22天,加在第二年裡,另一個23天加在第四年裡,所增加的天數放在第十二月的24日與25日之間。這實際上就是陰陽歷了,歷年平均長度為366.25天,同時用增加或減少補充月的辦法來補救歷法與天時不和的缺點。但這樣卻更增加了混亂:月份隨意流轉。比如,掌管歷法的大祭司長在自己的朋友執政的年份,就硬插進一個月,而當是仇人執政,就減少補充月,來縮短其任期。民間契約的執行也受到影響,祭祀節與齋戒日都在逐漸移動,本該夏天的收獲節竟跑到了冬天舉行。

當儒略·凱撒第三次任執政官時,指定以埃及天文學家索西琴尼為首的一批天文學家制定新歷,這就是儒略歷。

儒略歷的主要內容是:每隔三年設一閏年,平年365天,閏年366天,歷年平均長度為365.25日。以原先的第十一月1日為一年的開始,這樣,羅馬執政官上任時就恰值元旦。 儒略歷每年分12個月,第1、3、5、7、9、11月是大月,大月每月31天。第4、6、8、10、12月為小月,小月每月30天。第二月(即原先的第十二月)在平年是29天,閏年30天,雖然月序不同於改歷前,可是仍然保留著原來的特點,是一年中最短的月份。

儒略歷從羅馬紀元709年,即公元前45年1月1日開始實行。 這一年,為了彌補羅馬歷與太陽年的年差,除了355天的歷年和一個23天的附加月外, 又插進兩個月,其中一個月為33天,另一個月為34天。這樣,這一年就有355+23+33+34=445天。這就是歷史上所稱的「亂年」。

西方歷法從儒略歷實施開始,終於走上正軌。滑稽的是,那些頒發歷書的祭司們,有本事從烏鴉的爭斗預卜吉凶,卻把改歷命令中的「每隔三年設一閏年」誤解為「每三年設一閏年」。這個錯誤直到公元前9年才由奧古斯都下令改正過來。

「奧古斯都」是神聖、庄嚴、崇高的意思。在古羅馬,這個尊號過去只是在舉行宗教儀式上才授予的。在公元前27年,元老院把它授給了屋大維。他是儒略·凱撒姐姐的兒子,是凱撒遺囑的第一繼承人。

想當年,偉大的凱撒大帝南征北戰,東討西伐,雄才大略,不可一世,後來更成為事實上的獨裁者。樹大招風,遭到許多人嫉妒。公元前44年,當凱撒意圖公開稱帝時,卻在元老院的議事廳遭到刺殺。此時屋大維還不滿20歲,但他卻頗具智力和手腕,逐漸積蓄力量,到公元前30年,擊敗所有對手,成了羅馬「第一公民」。屋大維實際上就是唯一具有無限權力的統治者,他結束了羅馬共和時期。因此,歷史上把從公元前27年開始的羅馬,稱為羅馬帝國。

當奧古斯都准備改正閏年錯誤時,已經多閏了三次,於是他下令從公元前8年到公元4年停止閏年,即公元前5年、公元前1年和公元4年仍是平年,以後又恢復為每四年一閏了。 為了紀念他的這一功績,羅馬元老院通過決議,把儒略歷的第八月改稱為「Augustus」,即奧古斯都月,因為他在這個月里曾取得過巨大的軍事勝利。但這個月是小月,未免有點遜色,何況羅馬人以單數為吉,而30天卻是個雙數,於是就從2月份拿出一天,加到奧古斯都月里,8月就31天了,可憐的2月在平年只有28天,碰上四年一次的閏年也不過29天。7、8、9月連續三個月都是大月,看起來很不順眼,使用也不方便, 就把9月改為30天,10月為31天,11月為30天,12月為31天。這樣,大小月相間的規律破壞了,一直到兩千年後的今天還受到影響。

奧古斯都修改過的歷法格式與現行公歷一模一樣了,但它的紀元,即計算年代的起算點還不是公元元年,它的閏年方法與現行公歷還不完全一致。這兩點差別與基督教的起源和發展有密切的關系。

基督教產生於公元一世紀的巴勒斯坦,「基督」一詞是古希臘語的譯音,意為「救世主」。傳說基督教的創始人是耶穌,他作為救世主,許諾窮人死後升入天堂,而富人要進入天堂比駱駝穿過針眼還難。由於撥動了社會下層人民的心弦,基督教逐漸傳播開來,引起羅馬統治者不安,在提庇留皇帝時代,羅馬派駐猶太的總督,將耶穌釘死在十字架上。但是第三天,耶穌從墳墓中復活過來,並升了天,他將來還要對所有的死人、活人施行末日審判。後來,基督教徒把這些傳說和耶穌言行記錄下來,編寫了《新約聖經》。

早期的基督教,因為打破了羅馬帝國的神權統治,而多次遭到鎮壓。後來,羅馬帝國日漸衰落,奴隸制日趨瓦解,原來的社會上層分子在彷徨中紛紛加入基督教,並逐步控制了它,努力尋求統治者對教會的支持。統治者對教會轉而採取懷柔政策,到四世紀末,羅馬帝國終於宣布基督教為其國教。

公歷的紀元,就是從「耶穌降生」的那年算起的。這與基督教的興盛密切相關。

此後,儒略歷被認為是准確無誤的歷法, 於是人們把3月21日固定為春分日,卻帶來了未曾料想到的麻煩。隨著時間的推移,人們發覺,真正的春分不再與當時的日歷一致,這個晝夜相等的日期越來越早,到16世紀末已提前到3月11日了。 春分逐漸提前,是由於儒略歷並非最精確的歷法,它的歷年平均長度等於365.25日,還是比回歸年長了11分14秒,這個差數雖然不大,但累積下去,128年就差一天,400年就差三天多。

為了不違背宗教會議的規定,滿足教會對歷法的要求,羅馬教皇格里高利十三世設立了改革歷法的專門委員會,比較了各種方案後, 決定採用義大利醫生利里奧的方案,在400年中去掉儒略歷多出的三個閏年。

1582年3月1日,格里高利頒發了改歷命令,內容是:

一、1582年10月4日後的一天是10月15日,而不是10月5日,但星期序號仍然連續計算,10月4日是星期四,第二天10月15日是星期五。這樣,就把從公元325年以來積累的老賬一筆勾銷了。

二、為避免以後再發生春分飄離的現象,改閏年方法為: 凡公元年數能被4整除的是閏年,但當公元年數後邊是帶兩個「0」的「世紀年」時,必須能被400整除的年才是閏年。

格里高利歷的歷年平均長度為365日5時49分12秒,比回歸年長26秒。雖然照此計算,過3000年左右仍存在1天的誤差,但這樣的精確度已經相當了不起了。

由於格里高利歷的內容比較簡潔,便於記憶,而且精度較高,與天時符合較好,因此它逐步為各國政府所採用。我國是在辛亥革命後根據臨時政府通電,從1912年1月1日正式使用格里高利歷的。
http://www.51beida.com/view.asp?id=724

西方歷法的第一次改革是羅馬朱利烏斯·凱撒大帝引進的。他採用的四年一閏的閏年方式。由於一個太陽年不剛好是365.25天,而是 365.242199…天。到16世紀,每年11分14秒的誤差已經累積成10天,也就是歷法上多了10天。於是教皇格利戈里八世進行了一次校正。他在1582年2月24日以教皇訓令頒布,將1582年10月5日至14日抹掉,並且對原來的閏年方法進行了校正。經過校正的歷法叫格利戈里歷法,也就是我們現在用的公歷。1752年,英國人決定採用格利戈里歷法,不過從1582年到那時,歷法又多出了1天,所以英國議會在1752年作出決定,抹掉11天——1752年9月3日至13日。」
http://www.ugain.cn/bbs/viewthread.php?tid=36

----------------
如何求某一天是星期幾?
請注意這樣一個事實,即從公元元年一月一日開始到現在,每一天都是連續的,而每個星期有7天,也是連續的,也就是說日期和星期是一對一的,沒有斷檔現象。我的基本思想是計算出當前天是從公元元年一月一日開始的第幾天,再利用星期的周期性來計算公元任何一天是星期幾。
假設當前年份為y,並忽略閏年,則從公元元年一月一日到y-1年共有365*(y-1)天,加上閏年多出來的天數,即加上1*((y-1)/4-(y-1)/100+(y-1)/400),"/"為整除,得:365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)。我們再補上從當前1月1日開始到當前天的天數e,即為所求。即:365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e。它的值即為當前天是從公元元年一月一日開始算起的第幾天。補上一個x(x是與公元元年一月一日是星期幾有關的一個0~6的整數),並將這個表達式賦給變數t,即:t=x+365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e再用t除以7,余幾即為星期幾(餘0為星期日)。
下面討論x的求法,如果知道公元元年一月一日是星期幾,就可以直接得到x的值,但現在公式還沒有求出來,不知道公元元年一月一日是星期幾。不過沒關系,畢竟知道最近的日期是星期幾。不妨看一下2001年1月1日是星期幾,結果是星期一,代入公式得t=x+730516,用730516除以7,得104355,余數是1,則為了保證2001年1月1日是星期一,取x 為0,所以公元元年一月一日也是星期一。至此,得到了完整的公式:
t=365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e
再將它做一下改進,我們將公式變形為:
t=(52*7+1)*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e
利用星期的周期性,將52*7+1從公式中刪除,得:
t=(y-1)+((y-1)/4-(y-1)/100+(y-1)/400)+e

以下是這種演算法的C語言程序:

#include<stdio.h>
char *name[]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
void main(void)
{
int d,m,y,e,t,f;
printf("請輸入日:");
fflush(stdout);
scanf("%d",&d);
printf("請輸入月:");
fflush(stdout);
scanf("%d",&m);
printf("請輸入年:");
fflush(stdout);
scanf("%d",&y);
switch(m)
{
case 1:e=d;break;
case 2:e=31+d;break;
case 3:e=59+d;break;
case 4:e=90+d;break;
case 5:e=120+d;break;
case 6:e=151+d;break;
case 7:e=181+d;break;
case 8:e=212+d;break;
case 9:e=243+d;break;
case 10:e=273+d;break;
case 11:e=304+d;break;
case 12:e=334+d;break;
default:return;
}
if(y%4==0&&y%100!=0||y%400==0)
if(m>2)
++e;
--y;
t=y+y/4-y/100+y/400+e;
f=t%7;
printf("這一天是 %s\n",name[f]);
}

再談星期的計算

「讓我們看看1752年9月14號這個星期四吧,我們的公式最遠只能推算到這里了。」
——Kim S. Larsen

「從公元元年1月1日開始到現在,每一天都是連續的。」
——於鵬

「西方歷法的第一次改革是羅馬朱利烏斯·凱撒大帝引進的。他採用的四年一閏的閏年方式。由於一個太陽年不剛好是365.25天,而是 365.242199…天。到16世紀,每年11分14秒的誤差已經累積成10天,也就是歷法上多了10天。於是教皇格利戈里八世進行了一次校正。他在1582年2月24日以教皇訓令頒布,將1582年10月5日至14日抹掉,並且對原來的閏年方法進行了校正。經過校正的歷法叫格利戈里歷法,也就是我們現在用的公歷。1752年,英國人決定採用格利戈里歷法,不過從1582年到那時,歷法又多出了1天,所以英國議會在1752年作出決定,抹掉11天——1752年9月3日至13日。」

日期的限制是Kim S. Larsen演算法的問題嗎?不。
公元元年1月一日開始到現在,每一天都是連續的嗎?不。
一個簡單的方法就可以證明上述事實——用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年9月14日之前還是之後)是星期幾,二者的答案肯定是相同的。讓我們來分析一下吧。
首先,他們把日期對星期的決定作用都分為年、月、日三個決定因素。對於年的因素,從兩者的計算公式 就能看出是相同的;對於日的因素,兩者都是直接計入,故也是相同的;而對於月的因素,Kim S. Larsen博士構造了一個公式,(一個非常巧妙的公式,)通過以月份為自變數算出的函數值作為對星期的影響量。而於鵬同學採用了查表的方法,即先構造好一個以月份為索引的表對於相應的月份,通過查表得出其對星期的影響量。(以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

表一 表二

其次,在處理閏年2月29日的問題上,兩者的做法略有不同,但效果還是相同的。Kim S. Larsen博士採用的方法相當高明,他把二月排在一年的最後,管他閏不閏,反正是最後一天。而於鵬同學加了一個if分支,直觀有效。
大師不愧為大師,設計的演算法簡潔、優美;而於鵬同學的演算法,簡單易懂,並且效率並不差。
好了,該解決這個「歷史遺留問題」了。其實,並沒有什麼數學公式能算出指定日期是星期幾,我們可以試著拼湊一個,不過何必呢?加個if分枝不就解決問題了嗎?(Kim S. Larsen演算法+於鵬思想)對Kim S. Larsen 博士的程序作一些必要的添加,可得到突破1752年9月14日日期限制的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年9月3日前*/
A = (D + 2*M + 3*(M+1)/5 + Y + Y/4 +5) % 7;/*1752年9月3日前的公式*/
else A = (D + 2*M + 3*(M+1)/5 + Y + Y/4 - Y/100 + Y/400) % 7;/*1752年9月3日後的公式*/
printf("It's a %s.\n",name[A]);
}

另外:
1.公元1年1月1日是星期六。
2.如果有朋友對這個問題感興趣,或是有什麼好的演算法,歡迎和我聯系。我的聯系方法是:[email protected]
3.據說現行公歷2800年左右還會有一天的誤差,那時程序又要修正了。:)

高斯--澤勒公式:

A=(y+[y/4]-[y/100]+[y/400]+x ) mod 7
星期幾:A
(A=0 為星期 天!)
公元年: y
天數 :x ( 由當年月份和日期定,即距離當年初的天數。例:2001/3/1 x=31+28+1 )

http://topic.csdn.net/t/20031116/18/2463557.html

熱點內容
綠豆煮出來的顏色為什麼是深紅色 發布:2025-01-20 21:45:20 瀏覽:500
為什麼睡一個晚上後背特別冷 發布:2025-01-20 21:45:12 瀏覽:130
為什麼人拉尿會有兩種顏色 發布:2025-01-20 21:41:08 瀏覽:882
淘寶上的蘭花為什麼貴 發布:2025-01-20 21:33:40 瀏覽:774
為什麼開便宜車的沒素質 發布:2025-01-20 21:25:13 瀏覽:632
晚上為什麼不適合打排位 發布:2025-01-20 21:25:05 瀏覽:954
提取數據文件完畢為什麼還要解壓 發布:2025-01-20 21:22:08 瀏覽:337
手機芒果app為什麼不能投屏 發布:2025-01-20 21:04:48 瀏覽:568
淘寶圖片儲存為什麼格式 發布:2025-01-20 20:58:58 瀏覽:714
vivo為什麼連接不上電腦藍牙 發布:2025-01-20 20:57:21 瀏覽:934