一、年月日-->星期X
1、基姆拉尔森:w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7 // w:0:星期一...依此类推
int cal1(int y,int m,int d) { if(m==1||m==2) m+=12,y--; int w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; return ++w; }
2、蔡勒公式:w=(y+y/4+c/4-2*c+26*(m+1)/10+d-1+7)%7 // w:0:星期日...依此类推
int cal2(int y,int m,int d) { if(m==1||m==2) m+=12,y--; int c=y/100,ty=y%100; int w=ty+ty/4+c/4-2*c+26*(m+1)/10+d-1; return w%7==0?7:(w+7)%7; }
Ps:公式符号说明:
w:0:星期日...依此类推(后面+7是因为考虑负数情况)
c:世纪-1(y前两位数)
y:年(y后两位数)
m:月(m>=3 && m<=14,即在蔡勒公式和基姆拉尔森公式中,某年的1、2月要看作上一年的13、14月来计算,如:2003年1月1日-->2002年的13月1日)
d:日
[]:代表取整(这里准确是向下取整),即只要整数部分。
二、待更新...