说明网
教育科学 1 个回答

如何通过数学公式推算历史上任意公历日期对应的星期几?

zh_Huang 提问者

发布于 2026-11-08

问题补充

蔡勒公式(Zeller's congruence)是推算公历日期对应星期几的常用数学方法。该公式适用于格里高利历,通过将年、月、日代入特定表达式取模运算得出结果。需注意1月和2月按上一年的13月、14月处理。

1 个回答

按发布时间排序
吉普2020 回答者

回答于 2026-11-08

通过蔡勒公式(Zeller's congruence)可以推算历史上任意公历日期对应的星期几。

公式

$$h = \left( q + \left\lfloor \frac{13(m+1)}{5} \right\rfloor + K + \left\lfloor \frac{K}{4} \right\rfloor + \left\lfloor \frac{J}{4} \right\rfloor - 2J \right) \mod 7$$

变量定义与步骤

  1. q:日期中的日数。
  2. m:月份。关键规则:将1月和2月分别视为上一年的13月和14月。例如2024年1月需按2023年13月计算。
  3. K:年份的后两位数(即 year mod 100)。若月份为13或14,则年份减1后再取后两位。
  4. J:年份的前两位数(即世纪数,year / 100 取整)。
  5. h:计算结果,对应星期几:0=星期六,1=星期日,2=星期一,3=星期二,4=星期三,5=星期四,6=星期五。

判断依据

公式中各项的含义:

  • $q$ 贡献日数的偏移。
  • $\lfloor 13(m+1)/5 \rfloor$ 近似表达各月天数累积对星期的影响。
  • $K$ 和 $\lfloor K/4 \rfloor$ 处理平年与闰年中每年多出的天数及闰年补偿。
  • $\lfloor J/4 \rfloor - 2J$ 处理世纪级别的闰年修正(格里高利历每400年97个闰年)。

适用条件

  • 仅适用于格里高利历(现行公历),即1582年10月15日之后的日期。对于此日期之前仍使用儒略历的地区,需改用儒略历版本的蔡勒公式(将 $-2J$ 替换为 $+5J$ 并调整常数)。
  • 计算结果为负数时,取模运算应保证余数为非负整数(即加上7再取模)。

常见误区

  • 未调整1月和2月:直接代入 m=1 或 m=2 会导致结果错误,必须将其转换为上一年的13月或14月。
  • 混淆历法:对1582年之前的历史日期直接使用格里高利历公式,忽略了当时实际使用的是儒略历,各国切换历法的时间也不统一。
  • 取模方向:部分编程语言中负数取模结果为负,需手动加7调整为正余数以正确映射星期。

内容由网友提供,仅供参考。