鉴于datetime.datetime.now(),考虑到闰年,我如何得到本周的周一 - 周日,然后是去年的同一周一 - 周日?
我的一个想法是让timedelta达到-365天,然后找到最近的星期一或星期日。我确信有更好的方法。
编辑:我不介意使用datetuil,如果有什么东西让这更容易。
答案 0 :(得分:8)
如果使用dateutil不是问题,只需使用它:)
relativedelta是您需要的对象 在这里,您可以将一年减去当前日期。
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)
答案 1 :(得分:3)
如果今年的这个星期一有N日,那么去年同一个星期一的日期为N + 1,如果之间没有2月29日,否则去年的星期一会有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
答案 2 :(得分:2)
from datetime import date, timedelta
monday = date.today() - timedelta(days=date.today().weekday())
sunday = monday + timedelta(days=6)
第二个问题的答案可能取决于什么是相同的'相同'星期一星期天。我从天真的版本开始,如果它不正确则进行调整:
last_year_mon = monday - timedelta(weeks=52)
last_year_sun = last_year_mon + timedelta(days=6)
答案 3 :(得分:0)
您可以使用.isocalendar()
来检索当年的周数,然后从那里获取当周和上一年的星期一/星期日。
year, week, _ = datetime.datetime.now().isocalendar()
然后,使用this answer中的iso_to_gregorian
:
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)