Python 获得周一、周日和去年';It’星期一和星期日,同一周

Python 获得周一、周日和去年';It’星期一和星期日,同一周,python,date,Python,Date,给定datetime.datetime.now(),考虑闰年,如何得到本周的星期一-星期日,然后是去年的同一个星期一-星期日 我的一个想法是得到-365天的时间差,然后找到最近的周一或周日。我相信有更好的办法 编辑:我不介意使用datetuil,如果里面有什么东西可以让这更简单。如果今年的这个星期一有日期N,如果中间没有2月29日,去年的同一个星期一将有日期N+1,否则去年的星期一将有日期N+2 from datetime import date, timedelta today = date

给定datetime.datetime.now(),考虑闰年,如何得到本周的星期一-星期日,然后是去年的同一个星期一-星期日

我的一个想法是得到-365天的时间差,然后找到最近的周一或周日。我相信有更好的办法


编辑:我不介意使用datetuil,如果里面有什么东西可以让这更简单。

如果今年的这个星期一有日期N,如果中间没有2月29日,去年的同一个星期一将有日期N+1,否则去年的星期一将有日期N+2

from datetime import date, timedelta

today = date.today()
monday = today - timedelta(today.weekday())
sunday = monday + timedelta(6);
print monday, '-', sunday

monday_last_year = monday - timedelta(364) # We are trying to go to date N + 1.
if monday_last_year.weekday() == 1: # It will be either 0 or 1.
    monday_last_year + timedelta(1) # This is date N + 2.
sunday_last_year = monday_last_year + timedelta(6)
print monday_last_year, '-', sunday_last_year
第二个问题的答案可能取决于什么是“相同的”周一周日。我会从朴素的版本开始,如果它不正确,我会进行调整:

last_year_mon = monday - timedelta(weeks=52)
last_year_sun = last_year_mon + timedelta(days=6)

如果使用dateutil没有问题,就使用它:)

这就是你需要的东西 在这里,您可以将一年减为当前日期

from datetime import *
from dateutil.relativedelta import *
NOW = datetime.now()
last_monday = NOW+relativedelta(years=-1, weekday=MO)
last_sunday = NOW+relativedelta(years=-1, weekday=SU)
您可以使用检索一年中的周数,然后从中导出当前和上一年该周的星期一/星期日

year, week, _ = datetime.datetime.now().isocalendar()
然后,使用
iso\u to\u gregorian
from:

year, week, _ = datetime.datetime.now().isocalendar()
this_sunday = iso_to_gregorian(year, week, 0)
this_monday = iso_to_gregorian(year, week, 1)
last_year_sunday = iso_to_gregorian(year - 1, week, 0)
last_year_monday = iso_to_gregorian(year - 1, week, 1)