如何使用Python计算当前周到给定YYYY-WW格式未来周的间隔周数
Python计算YYYY-WW格式周数间隔方案
前置注意事项
YYYY-WW格式的周数默认遵循ISO 8601周规则:每年第一个周包含1月4日,每周从周一开始计算,跨年周归属到天数更多的那一年。直接拆分年份和周数做减法会出现跨年计算错误,必须基于日期基准计算间隔。
方案1:标准库实现(无额外依赖)
无需安装第三方包,直接使用Python自带的datetime模块实现:
from datetime import datetime, timedelta def get_week_interval(target_week: str) -> int: # 解析目标周字符串 target_year, target_week_num = map(int, target_week.split("-")) # 定位目标周的周一作为基准日 jan_4 = datetime(target_year, 1, 4) jan_4_iso = jan_4.isocalendar() day_offset = (target_week_num - jan_4_iso.week) * 7 + (1 - jan_4_iso.weekday) target_monday = jan_4 + timedelta(days=day_offset) # 定位当前周的周一作为基准日 today_iso = datetime.today().isocalendar() current_monday = datetime.today() - timedelta(days=today_iso.weekday - 1) # 计算间隔周数 return (target_monday - current_monday).days // 7 # 调用示例 print(get_week_interval("2024-40"))
方案2:第三方库实现(代码更简洁)
使用封装好ISO周规则的isoweek库,代码更易维护:
- 先安装依赖:
pip install isoweek - 实现代码:
from datetime import datetime from isoweek import Week def get_week_interval_simple(target_week: str) -> int: target_year, target_week_num = map(int, target_week.split("-")) return Week(target_year, target_week_num) - Week.withdate(datetime.today()) # 调用示例 print(get_week_interval_simple("2024-40"))
结果说明
- 返回值>0:目标周在当前周之后,间隔为对应数值周
- 返回值=0:目标周与当前周为同一周
- 返回值<0:目标周在当前周之前
内容的提问来源于stack exchange,提问作者himanshu choudhary
相关产品推荐
相关产品推荐

