static WEEK GetWeekday ( const UINT uYear, const UINT uMonth, const UINT uDay )
{
int a = (14 - uMonth) / 12;
int y = uYear - a;
int m = uMonth + 12 * a - 2;
int d = (uDay + y + y / 4 - y / 100 + y / 400 + 31 * m / 12) % 7; WEEK week_table[] = {WEEK_SUN, WEEK_MON, WEEK_TUE, WEEK_WED, WEEK_THU, WEEK_FRI, WEEK_SAT};
return week_table[d];
}
这个是看到别人用的关于求星期几的一个算法。
对于这样的算法,本人不是很懂,想求教大家给我解释下,这个算法是怎么实现的,为什么这样算??
详细点更好 谢谢了!
解决方案 »
- domodal出来的对话框中的析构函数什么时候执行
- 我在做图像处理的程序,想把一副640X480的图像,以坐标形式显示出来?
- 单文档 ADO 连接Access数据库 报错诡异,请大家帮忙看看
- 用mfc规则dll导出类,为什么链接时老提示 warning C4273: dll链接不一致
- 关于http请求的问题,如何得到返回的错误码,比如404?
- 窗口大小改变的时候是响应那个消息?
- 再次询问一个VC中取IP和MAC地址的问题
- WebBrowser2 打开网页的问题
- 这个程序为什么报错?
- 【新手求教】把列表控件的数据输出到excel的时候怎么总是多输出一行和乱码?
- 救命呀,我想通过串口编程实现千分表的清零,怎么实现呀!!!
- Socket Connect问题,PC连接没有问题,但是CE环境有问题
结构体里面的wDayOfWeek就是星期几。
不用这么复杂。
int y = uYear - a;
int m = uMonth + 12 * a - 2;
前面这几行主要是调整下一年的月份,一年从3月开始算到第二年的2月为一整年,这样就把特殊2月份放到了最后面.
int d = (uDay + y + y / 4 - y / 100 + y / 400 + 31 * m / 12) % 7;
这句就是根据闰年平年计算了
c:世纪数减一(年份前两位数)
y:年(后两位数)
m:月(m的取值范围为3至14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)
d:日
1582年10月4日以前的公式有所不同,如下:
w = (y + (y/4) + (c/4) - 2c + (26(m+1)/10 + d + 3) % 7因罗马教皇修改历法,把1582年10月4日的下一天改为1582年10月15日