求星期
本文最后更新于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;
}
Python是真方便捏

评论

  1. 山里灵活的🐱
    Windows Chrome
    6 月前
    2025-9-18 21:35:23

    催更

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
八寻宁宁
什么猫
呼呼
派蒙的画作
上一篇
下一篇