已知日期求星期

· · 个人记录

设星期为w,年份为y,月份为m,日期为d

w = (d + 2 × m + 3 × (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) \% 7

计算结果为0~6,对应周一到周日。

注意:1,2月要当成上一年13,14月计算,上述除法均为整除。

具体代码:

#include <iostream>
#include <string> 

using namespace std;

// 日期求星期 
int week(int y, int m, int d) {
    if (m <= 2) {
        m += 12;
        y--;
    }
    return (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
} 

int main()
{
    string s[7] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
    int w = week(2023, 2, 27);
    cout << s[w] << endl;

    return 0;
}