You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取指定年份的周数?已知cweek方法可获取当前周数

获取指定年份的总周数(基于ISO周规则)

嘿,刚好我对这个问题很熟悉!你提到的cweek(在Python的datetime模块里指的是ISO标准的周数),要获取指定年份的总周数,其实可以利用ISO周的规则快速实现,下面给你两种靠谱的方法:

方法一:直接取年末特定日期的周数

ISO周的规则是每周从周一开始,且一年的最后一周不会早于12月28日(因为最多只有3天会跨到下一年)。所以我们只需要取该年12月28日的周数,就等于全年的总周数:

import datetime

def get_total_iso_weeks(year):
    # 12月28日必然属于当年的最后一周
    target_date = datetime.date(year, 12, 28)
    # Python 3.8+可以直接用target_date.cweek,效果和isocalendar()[1]一致
    return target_date.isocalendar()[1]

举个实际例子:

print(get_total_iso_weeks(2024))  # 输出53(2024年的最后一周是第53周)
print(get_total_iso_weeks(2023))  # 输出52

方法二:通过周起始日差值计算

如果你想更严谨地验证结果,可以计算该年第一周的周一到下一年第一周的周一的天数差,再除以7得到总周数:

import datetime

def get_total_iso_weeks(year):
    # 获取当年1月1日,调整到当年第一周的周一(ISO周的周一)
    first_day = datetime.date(year, 1, 1)
    first_week_monday = first_day - datetime.timedelta(days=first_day.isocalendar()[2] - 1)
    
    # 获取下一年第一周的周一
    next_year_first_day = datetime.date(year+1, 1, 1)
    next_year_first_week_monday = next_year_first_day - datetime.timedelta(days=next_year_first_day.isocalendar()[2] - 1)
    
    # 计算天数差除以7得到总周数
    return (next_year_first_week_monday - first_week_monday).days // 7

重要提醒

  • 以上方法都是基于ISO周标准,如果你的业务场景用的是其他周定义(比如每周从周日开始,或者第一周是1月1日所在周),总周数可能会有差异,需要根据规则调整逻辑。
  • cweek是Python 3.8及以上版本datetime.date对象的属性,低版本可以用isocalendar()[1]替代,效果完全一致。

内容的提问来源于stack exchange,提问作者user984621

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:58:29