“基姆拉尔森计算公式”

来源:百度知道 编辑:UC知道 时间:2024/07/03 03:31:07
“基姆拉尔森计算公式”有没有知道为什么今天明明是星期日,而算出来的却是星期六呀(用asp.net)
string CaculateWeekDay(int y, int m, int d)
{
if (m == 1) m = 13;
if (m == 2) m = 14;
int week =(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) % 7;
string weekstr = "";
switch (week)
{
case 1: weekstr = "一"; break;
case 2: weekstr = "二"; break;
case 3: weekstr = "三"; break;
case 4: weekstr = "四"; break;
case 5: weekstr = "五"; break;
case 6: weekstr = "六"; break;
case 7: weekstr = "日"; break;
}

return weekstr;
}

case 0: weekstr="星期一"; break;
case 1: weekstr="星期二"; break;
case 2: weekstr="星期三"; break;
case 3: weekstr="星期四"; break;
case 4: weekstr="星期五"; break;
case 5: weekstr="星期六"; break;
case 6: weekstr="星期日"; break;

你写错了

#include <stdlib.h>
#include <stdio.h>/*
*基姆拉尔森计算公式
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
*在公式中d表示日期中的日数,m表示月份数,y表示年数。 注意:在公式中有个与其他公式不同的地方: 把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。 *//*
* Tomohiko Sakamoto 提供的优雅的代码:
*/int dayofweek(int y, int m, int d) /* 0 = Sunday */
{
static int t[]={0,3,2,5,0,3,5,1,4,6,2,4};
y -= m < 3; /*楼主漏了这一句*/
return (y + y/4 - y/100 + y/400 + t[m-1] + d ) %7;
}int main(int argc, char ** argv)
{
int y = atoi(argv[1]);
int m = atoi(argv[2]);
int d = atoi(argv[3]); printf("%d-%d-%d