可以用表格法,比如说 2024 年的操作数如下
| 月份 | 1月 | 2月 | 3月 | 4月 | 5月 | 6月 | 7月 | 8月 | 9月 | 10月 | 11月 | 12月 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 操作数 | 7 | 3 | 4 | 7 | 2 | 5 | 7 | 3 | 6 | 1 | 4 | 6 |
比如说情人节是星期几? 2 月 14 号 可以这么算
2 月的操作数是 3,(14 + 3)/7 取余数为3, 那就是星期三,你能口算出来,女朋友肯定会很开心
可见,只要心里熟记 7347,2573,6146 这 12 个数字,就速算出 2024 年的几月几日是星期几,是不是很酷?
那么这 12 个数字是从哪儿来的呢?它们就是分别所对应的月份的上一个月的最后一天的星期数,如下表所示
| 2023-12-31 | 2024-1-31 | 2024-2-29 | 2024-3-31 | 2024-4-30 | 2024-5-31 | 2024-6-30 | 2024-7-31 | 2024-8-31 | 2024-9-30 | 2024-10-31 | 2024-11-30 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 星期7 | 星期3 | 星期4 | 星期7 | 星期2 | 星期5 | 星期7 | 星期3 | 星期6 | 星期1 | 星期4 | 星期6 |
下面附赠生成表格的 Python 脚本
import calendar
from datetime import datetime
week = ["1","2","3","4","5","6","7"]
year = 2024
first_row = ""
second_row = ""
third_row = ""
x, days = calendar.monthrange(year - 1, 12)
dt = datetime(year - 1, 12, days, 0, 0, 0)
first_row += f"|1月\t"
second_row += f"|---"
third_row += f"|{week[dt.weekday()]}\t"
for month in range(1,12):
x, days = calendar.monthrange(year,month)
dt = datetime(year, month, days, 0, 0, 0)
first_row += f"|{month+1}月\t"
second_row += f"|---"
third_row += f"|{week[dt.weekday()]}\t"
print(f"{first_row}|")
print(f"{second_row}|")
print(f"{third_row}|")