吉姆拉爾森:日期題目:星期幾,相差天數。

星期幾:

Kim Larsen Calculation Formula:請耐心看完噢,想了好久好久才寫出來的。

if(month == 2 || month == 1) {
	month+=12;
	--year;
}
int weekday=(day + 1 + 2*month + 3*(month+1)/5 + year + year/4 - year/100 + year/400)%7;

(年份偏差) 365 = 7*52+1: 一年後的同一天星期滯後一天,所以多一年多一天(+year)%7爲偏移的星期。
其中year/4 - year/100 + year/400是因爲閏年爲366天比365多一天:修正閏年還要多滯後一天。

(月份偏差) 一月 和 二月當成去年的 13月和14月,並且假設每個月都是28天:其中最初始的一月一日星期一,所以三月一日是星期三:即日子偏差爲應當爲(day+2+年份偏差+月份偏差)。
之後-1+2*month + 3*(month+1)/5爲第month(3<=month<=14)月的偏移值(%7爲星期的偏移量),可以驗算一下:
{0 3 5 1 3 6 2 4 0 2 5 1 }爲從3月到2月每個月的星期偏差值。三月從週二開始沒有偏差,但三月爲31天(4*7+3)使得四月偏差3天。依次類推,可知公式正確。

綜合 爲(day+ 2*month + 3*(month+1)/5 + year + year/4 - year/100 + year/400 + 1)%7。


日子相差多少天:

從上述可得知:如果是輸入兩個日期。可計算與某一個相同的日子相差多少天。相減便可。
距離0年0月0日的日子有

int days=365*year+year/4-year/100+year/400+month*28+2*month+3*(month+1)/5+day;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章