Python 构建上周、本周和下周的日期数组

Python 构建上周、本周和下周的日期数组,python,date,datetime,python-datetime,Python,Date,Datetime,Python Datetime,我经常被Python中有关日期的事情绊倒。在我的webapp中,我想显示日历中三周的每一天:最后一周、当前一周和下一周,周一表示一周的开始 我目前的做法是,在星期一之前,将日期往后退一步,然后再减去七天,然后再加上20天,以建立三周的范围。。。但这感觉真的很笨重 Python是有周的概念,还是我必须用天来手动预测它 编辑:现在我把它编码出来,这并不可怕,但我确实想知道是否还有更好的东西,同样是周而不是天的概念 today = datetime.date.today() last_monday =

我经常被Python中有关日期的事情绊倒。在我的webapp中,我想显示日历中三周的每一天:最后一周、当前一周和下一周,周一表示一周的开始

我目前的做法是,在星期一之前,将日期往后退一步,然后再减去七天,然后再加上20天,以建立三周的范围。。。但这感觉真的很笨重

Python是有周的概念,还是我必须用天来手动预测它

编辑:现在我把它编码出来,这并不可怕,但我确实想知道是否还有更好的东西,同样是周而不是天的概念

today = datetime.date.today()
last_monday = today - datetime.timedelta(days=today.weekday()) - datetime.timedelta(days=7)
dates = [last_monday + datetime.timedelta(days=i) for i in range(0, 21)]
对这样的操作有一些支持:

oneDay = datetime.timedelta(days=1)
oneWeek = datetime.timedelta(days=7)
您可以对它们使用标准数学:

today = datetime.date.today()
lastMonday = today - datetime.timedelta(days=today.weekday())

lastWeek = lastMonday - oneWeek
nextWeek = lastMonday + oneWeek

不,差不多就是这样。但基于结果的列表理解应该足够简单:

today = datetime.date(2013, 06, 26)
dates = [today + datetime.timedelta(days=i) for i in range(-7 - today.weekday(), 14 - today.weekday())]
请记住,范围不必从0开始。:-)

演示:


我想干净和自我记录的解决方案是:

import datetime

today = datetime.date.today()
start_day = today - datetime.timedelta(today.weekday() + 7)
three_weeks = [start_day + datetime.timedelta(x) for x in range(21)]

弯曲射程比我聪明一点。
import datetime

today = datetime.date.today()
start_day = today - datetime.timedelta(today.weekday() + 7)
three_weeks = [start_day + datetime.timedelta(x) for x in range(21)]