關於時間--地球公轉與閏年

地球自轉週期並不是完美不變的,而是在變慢,爲了讓UTC時間與地球自轉始終吻合,閏秒被採用,詳見我的博文關於時間–地球自轉與閏秒

這篇文章我們來談談地球公轉和閏年的問題。

地球繞太陽公轉也並不是完美的原型軌道,而且公轉週期也不是自轉週期(天)的整數倍,而是365.2422天。在目前的歷法中,一年有365天,這樣日曆上每1年就會比地球公轉快0.2422天,4年下來就會快上0.9688天。以此推算,40年以後,日曆就會快上96.88天,這就意味着北京的6月還是天寒地凍,顯然與人們心目中的“6月”相去甚遠。

爲此,我們可以這樣修正,即每4個365天后增加1天,即重複這個序列:365,365,365,366。然而這也會帶來問題,就是本來日曆比地球公轉快0.9688天,現在卻推遲了1天,這就導致4個曆法年後比地球公轉慢了0.0322天。以此推算,400年後就會慢0.0322*100=3.22天。這樣就需要在400年中,尋找合適的機會減去這3.22天,於是規定了在準瑞年(0,100,200,300,400,…)中無法被400整除的(100,200,300)時減去一天。這樣就會導致400年內曆法只會慢0.22天,4000年也只會慢上2天,這個差異在可以預見的將來是可以忽略的了。

上述推演的過程就是目前的歷法正在使用的算法。總結一下:

最基本的想法是,每4年增加一天,也就是出現一個準閏年;(能被4整除)
爲了防止增加的過多,每400年內需要去掉三個準閏年;(能被100整除但是不能被400整除)

下面是判斷給定年份是否是閏年的C語言算法。

int is_leap_year(int year)
{
    if(year % 4==0){
        if(year % 100==0 && year % 400 !=0){
            return 0;
        }
        return 1;
    }
    return 0;
}

在曆法中,由於1、3、5、7、8、10、12是31天,4、6、9、11是20天,2月是28天。這樣很自然地就把需要增加的這一天放到了最段的2月分了,閏年時,增加的那一天定爲2月29日。如果你的生日是2月29日,你就很幸運了,每4年才能過一次生日!而且不能被400整除的整百年份還要被去除(如2100,2200,2300,2500…)。

我們知道地球自轉速度在慢慢減小,地球公轉速速呢?要是也發生較大變化,目前的歷法也許還要面臨修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章