供应资讯
C\C++_由日期简单计算出某一天是星期几
2023-04-15 10:33  浏览:161

直接看代码和注释:

#include <iostream>

using namespace std;

bool isLeap(int y)

{

....return (((y%4==0) && (y%100!=0)) || (y%400==0));

}

int daysOfMonth(int y,int m)

{

....switch(m)

....{

....case 1: case 3:case 5:case 7:case 8:

....case 10:case 12:

........return 31;

....case 4: case 6:case 9:case 11:

........return 30;

....case 2:

........if(isLeap(y))

............return 29;

........else

............return 28;

....}

....return 0;

}

// 公元1年1月1日是周1

int weekDay0(int y, int m, int d) //暴力法,天数全部累加

{

....int wd=0;

....for(int i=1; i<y; ++i)

........wd += 365+isLeap(i);

....for(int j=1; j<m;j++)

........wd+=daysOfMonth(y,j);

....wd = wd+d;

....wd%=7;

....return wd;

}

// 公元1年1月1日是周1

// 如果不考虑闰年,则一年是365天,365%7=1

// 所以公元2年得第壹天是周二、公元3年得第壹天是周三……

// 这样,再把闰年考虑进来即可

// 公元1年1月1日是周1

// 公元2年1月1日是周2

// 公元3年1月1日是周3

// 公元4年1月1日是周4 (闰年是闰二月)

// 公元5年1月1日是周6(上一年是闰二月,要加一天)

// ……

int weekDay(int y, int m, int d)

{

....int wd=0;

....wd=y+(y-1)/4-(y-1)/100+(y-1)/400;

....for(int j=1; j<m;j++)

........wd+=daysOfMonth(y,j);

....wd = wd+d-1; // 是在1月1日得基础上递推得,所以日期-1

....wd%=7;

....return wd;

}

int main()

{

....cout<<weekDay(前年,11,9)<<endl; //6

....system("pause");

....return 0;

}

-End-