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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:39:02