You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中如何获取以周日为起始的上周日期?求优化方案

获取以周日为起始、周六为结束的上周日期范围

我来帮你搞定这个问题!要实现以周日为起始、周六为结束的上周日期范围,我们可以用Python标准库手动计算偏移,也可以借助第三方库简化逻辑,两种方式我都给你详细说明。

方法一:用标准库datetime手动实现

核心思路是先定位当前周的周日,再通过时间偏移得到上周的完整周期:上周日是当前周周日往前推7天,上周六则是当前周周日往前推1天(因为当前周周日的前一天就是上周的最后一天)。

这里要注意datetime里两个星期几方法的区别:

  • isoweekday():返回1(周一)到7(周日)
  • weekday():返回0(周一)到6(周日)

我们用isoweekday()计算更直观,代码如下:

from datetime import date, timedelta

def get_last_week_sun_sat():
    today = date.today()
    # 计算当前周的周日:如果今天是周日则加0天,否则加(7-今天的星期数)天
    current_week_sunday = today + timedelta(days=(7 - today.isoweekday()))
    # 上周日 = 当前周周日 - 7天
    last_week_sunday = current_week_sunday - timedelta(weeks=1)
    # 上周六 = 当前周周日 - 1天
    last_week_saturday = current_week_sunday - timedelta(days=1)
    return (last_week_sunday, last_week_saturday)

# 测试示例:假设今天是2018年3月12日(周一),会返回 (datetime.date(2018, 3, 4), datetime.date(2018, 3, 10))
print(get_last_week_sun_sat())

如果你原来的代码是基于周一作为周起始,只需要调整偏移逻辑:把原来计算上周起始的偏移天数,从today.weekday() +7改成today.isoweekday() +6(比如今天是周一,isoweekday()为1,1+6=7,往前推7天就是上周日)。

方法二:用python-dateutil简化实现(更优方案)

python-dateutil库提供了更人性化的日期偏移工具,不用手动算天数,能避免逻辑出错。先安装库:

pip install python-dateutil

然后用relativedelta直接定位目标日期,代码可读性拉满:

from datetime import date
from dateutil.relativedelta import relativedelta, SU

def get_last_week_sun_sat():
    today = date.today()
    # SU(-2) 表示"上上个周日"(即上周的周日),SU(-1)是最近的过去的周日(本周日)
    last_week_sunday = today + relativedelta(weekday=SU(-2))
    # 上周六就是上周日加6天
    last_week_saturday = last_week_sunday + relativedelta(days=6)
    return (last_week_sunday, last_week_saturday)

# 同样测试,返回 (2018-03-04, 2018-03-10)
print(get_last_week_sun_sat())

这种方法不用记复杂的偏移公式,日常开发用起来省心很多。

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

火山引擎 最新活动