本文最后更新于135 天前,其中的信息可能已经过时,如有错误请发送邮件到c550129432@163.com
Python
from datetime import datetime
obj = datetime.strptime(str, "%Y-%m-%d")
mp = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
return mp[obj.weekday()]
C++
这里首先补充一个 C++11 比较好用的函数 stoi,用于将字符串安全地转换为整数,然后介绍蔡锷公式:
\[ w = \left( d + \left\lfloor \frac{13(m+1)}{5} \right\rfloor + b + \left\lfloor \frac{b}{4} \right\rfloor + \left\lfloor \frac{a}{4} \right\rfloor – 2a \right) \bmod 7 \]
其中:
- \(w\):星期几 (0=星期六, 1=星期日, 2=星期一, …, 6=星期五)
- \(d\):日 (day)
- \(m\):月 (month),其中 1月和2月按上一年的13月、14月计算
- \(y\):年份
- \(a = \lfloor y / 100 \rfloor\):世纪 (century)
- \(b = y \bmod 100\):年份的后两位 (year of century)
// 计算某个日期对应的星期几(蔡勒公式)
// 输入:年份 y,月份 m,日期 d
// 返回:整数 w (0=Saturday, 1=Sunday, 2=Monday, ..., 6=Friday)
int week(int y, int m, int d)
{
// 如果是 1月 或 2月,则将其看作上一年的 13月 和 14月
// 因为蔡勒公式中这样处理才能保持正确性
if(m == 1 || m == 2)
{
m += 12;
y -= 1;
}
// a 表示世纪数 (year / 100)
// b 表示年份的后两位 (year % 100)
int a = y / 100;
int b = y % 100;
// 蔡勒公式核心计算
// 注意:floor 操作在 C++ 中通过整除实现
int w = (d + (13*(m+1)) / 5 + b + b/4 + a/4 - 2*a ) % 7;
// w 取模结果可能为负数(C++ % 运算规则)
// 如果 w < 0,需要加 7 让其变为正数
if (w < 0) w += 7;
return w;
}





催更