蔡勒公式:

计算星期几的常用方法之一是使用“蔡勒公式”(Zeller’s Congruence)。这个公式可以计算给定日期对应的星期几,具体步骤如下:

蔡勒公式的步骤

  1. 调整月份与年份

    • 如果月份是1月(1)或2月(2),则将其视为前一年的13月或14月,并将年份减1。
    • 对于其他月份,直接使用该月份和年份。
  2. 设定公式变量

    • 设定以下变量:
      • :日期(一个月中的日)
      • :月份(3-12代表3月到12月,1月和2月用13和14表示)
      • :年份的后两位(year % 100)
      • :年份的前两位(year / 100)
  3. 应用公式计算

    • 使用公式计算:

    • image-20241113212816146

    • 其中,

      的值代表星期:

      • 0 = Saturday
      • 1 = Sunday
      • 2 = Monday
      • 3 = Tuesday
      • 4 = Wednesday
      • 5 = Thursday
      • 6 = Friday

示例C语言实现

以下是使用蔡勒公式计算任何给定日期的星期几的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>

int getDayOfWeek(int year, int month, int day) {
if (month < 3) {
month += 12; // 将1月和2月视为上一年的13月和14月
year--;
}
int q = day; // 日期
int m = month; // 月份
int K = year % 100; // 年份的后两位
int J = year / 100; // 年份的前两位

// 蔡勒公式
int h = (q + (13 * (m + 1)) / 5 + K + (K / 4) + (J / 4) - 2 * J) % 7;

return h; // 返回星期几
}

int main() {
int year = 2024;
int month = 10; // 例如10月
int day = 1; // 例如1日

int weekday = getDayOfWeek(year, month, day);
printf("日期 %d-%d-%d 是星期:%d\n", year, month, day, weekday);
return 0;
}

CopyInsert

运行这段代码可以计算给定日期(例如2024年10月1日)对应的星期几。在这个示例中,输出的星期会以数字形式显示,可以根据前面提到的对应关系来判断具体是哪一天。