ISO8601 week number of the year

 

 

复制代码
import datetime

datetime.date(2023, 1, 1).isoweekday()


def leap_year(year: int) -> bool:
    return year % 4 == 0 and year % 100 != 0 or year % 400 == 0


for year in range(2001, 2101):
    weekday = datetime.date(year, 1, 1).isoweekday()
    n_days = 366 if leap_year(year) else 365
    weeks = 0
    if weekday <= 4:  # Monday Tuesday Wednesday Thursday
        weeks += 1
        # Monday -7(1) Tuesday -6(2) Wednesday -5(3)
        n_days = n_days - (8 - weekday)
    else:  # Friday Saturday Sunday
        # Friday -3(5) Saturday -2(6) Sunday -1(7)
        n_days = n_days - (8 - weekday)

    quotient, remainder = divmod(n_days, 7)
    
    if not remainder:
        weeks += quotient
    else:
        last_weekday = datetime.date(year, 12, 31).isoweekday()
        weeks += quotient
        if last_weekday >= 4:
            weeks += 1

    print(f'year: {year}, weeks: {weeks}')
复制代码

 

posted @   ascertain  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2022-02-10 PostgreSQL: non-interactive input password
2022-02-10 Git: 测试脚本
2022-02-10 Grade: conf
2022-02-10 Nginx: Configuration
2022-02-10 Git: checkout all remotes branches
2022-02-10 Node: URL
点击右上角即可分享
微信分享提示