如何获取指定年份的周数?已知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
相关产品推荐
相关产品推荐

