星期幾:
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;