获取本周的星期一和星期日,以及去年的同一周的星期一和星期日
给定当前的日期和时间(datetime.datetime.now()),我该如何获取本周的周一到周日,然后再获取去年的同样的周一到周日,同时考虑到闰年的情况呢?
我想到的一个办法是先计算出-365天的时间差,然后找到最近的周一或周日。不过我相信还有更好的方法。
补充:如果有datetuil这个库里的东西能让这个过程更简单,我也不介意使用。
4 个回答
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
如果今年的这个星期一是日期N,那么去年的同一天星期一的日期会是N + 1,前提是中间没有2月29日。如果有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
9
如果使用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)