吉姆拉尔森:日期题目:星期几,相差天数。

星期几:

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