int week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7 +1;
1-7

解决方案 »

  1.   

    楼上说的有意思。
    不过最好谁能告诉我这个公式怎么推出来的,我还没想明白呢。
    就看这篇文章好了:http://blog.csdn.net/ycrao/archive/2000/11/24/3825.aspx
      

  2.   

    http://community.csdn.net/Expert/topic/3960/3960865.xml?temp=.8191187
    来这里看看
      

  3.   

    1996年是个闰年,这带来了我们的下一个问题。这一年的3月1日是星期五,而不是刚才的公式推算出的星期四。所以每当我们碰上闰年时还得多加上1。判断闰年的规则是,能被4整除,并能被100和400同时整除的年份就是闰年。就这样,我们在原有的基础上添加Y/4--Y/100+Y/400。再强调一下,我们必须从一开始就确保正确。既然(1994/4--1994/100+1994/400) mod 7=(498--19+4) mod 7=483 mod 7=0,所以就不用再做任何调整了。这样,例2(b)就是我们最终的成果了。这个公式能一直工作下去,除非改变现行的日历系统。作为示例,让我们试着推算一下2000年7月4日:(4+2*3+(7+1)/5+2000+2000/4--2000/100+2000/400) mod 7= (4+14+2000+500--20+5) mod 7=2507 mod 7=1,所以那一天是星期二。这段话是取你的文章中的一段话,请看最后一个等式=1而又说这句话“所以那一天是星期二”
    再看一段话
    “首先,我们要用变量D,M和Y来表示日期。比如,1994年3月1日就用“D=1,M=3,Y=4”记录。我们的目标是让计算结果在0到6之间。0代表星期一,1代表星期二,2代表星期三,依此类推。”
    也是你的那个文章里面的,看到了吧"0代表星期一,1代表星期二,2代表星期三"
    说明问题了吧
    至于那个人为什么这么算,你还是好好读下你的那个文章吧
    里面写的很清楚了