鉴于datetime.datetime.now(),考虑到闰年,我如何得到本周的周一到周日,然后是去年的同一周一到周日?获取周一和周日以及去年的周一和周日,同一周
我想到的一个想法是获得-365天的timedelta,然后找到最近的星期一或星期天。我确信有更好的方法。
编辑:我不介意使用datetuil,如果在那里有东西会使这更容易。
鉴于datetime.datetime.now(),考虑到闰年,我如何得到本周的周一到周日,然后是去年的同一周一到周日?获取周一和周日以及去年的周一和周日,同一周
我想到的一个想法是获得-365天的timedelta,然后找到最近的星期一或星期天。我确信有更好的方法。
编辑:我不介意使用datetuil,如果在那里有东西会使这更容易。
如果使用dateutil是没有问题的,只是用它:)
的relativedelta是对象,你需要 在这里你将能够减少一年到当前日期。
NOW = datetime.now()
last_monday = NOW+relativedelta(years=-1, weekday=MO)
last_sunday = NOW+relativedelta(years=-1, weekday=SU)
如果今年的这个星期一有日期N,同周一去年将有个约会N + 1如果没有年02月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
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)
几年有53周,对不对?这很重要吗? – 2012-01-27 16:49:39
您可以使用.isocalendar()
找回当年周数,然后从那里获得该周的周一/周日当前和前一年。
year, week, _ = datetime.datetime.now().isocalendar()
然后,使用iso_to_gregorian
从this answer:
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)
非常酷。谢谢。 – 2012-01-27 16:57:21