算法--给定日期求星期几

发布时间 2023-03-27 19:27:26作者: 山雨欲來風滿楼

问题:给定日期求星期几。

答:利用蔡勒公式(Zeller's congruence)

h = (q + (26 * (m + 1)) // 10 + k + k // 4 + j // 4 + 5 * j) % 7

 

  • q 是月中的某一天(日期)
  • m 是月份(3 表示 3 月,4 表示 4 月,以此类推)
  • k 是年份的最后两位数
  • j 是年份的前两位数

 

 

Python代码示例:

def get_weekday(date_string):
    year, month, day = [int(x) for x in date_string.split('-')]
    if month < 3:
        month += 12
        year -= 1
    K = year % 100   # 年份的后两位
    J = year // 100  # 年份的前两位
    q = day       # 月中的某一天
    m = month      # 月份
    h = (q + 13*(m+1)//5 + K + K//4 + J//4 + 5*J) % 7
    weekday_num = (h + 5) % 7  # 转换成0~6表示星期几
    weekday_name = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday','Saturday', 'Sunday' ][weekday_num]
    return weekday_name

if __name__ == '__main__':
    res = get_weekday("2023-06-01")
    print(res)

 

 

参考资料:

https://zh.wikipedia.org/wiki/%E8%94%A1%E5%8B%92%E5%85%AC%E5%BC%8F

https://juejin.cn/s/%E7%AE%97%E6%97%A5%E6%9C%9F%E6%98%AF%E6%98%9F%E6%9C%9F%E5%87%A0%E7%9A%84%E5%85%AC%E5%BC%8F