我经常被 Python 中关于日期的事情绊倒。在我的 web 应用程序中,我想显示一个日历三周的每一天:上周、当前周和下周,星期一表示一周的开始。
我目前处理这个问题的方法是退回日期,直到我到达星期一,然后再减去 7 天,然后加上 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)]
最佳答案
不,差不多就是这样。但是基于 datetime.date.weekday()
的列表推导式结果,应该很容易:
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
>>> from pprint import pprint
>>> today = datetime.date(2013, 07, 12)
>>> pprint([today + datetime.timedelta(days=i) for i in range(-7 - today.weekday(), 14 - today.weekday())])
[datetime.date(2013, 7, 1),
datetime.date(2013, 7, 2),
datetime.date(2013, 7, 3),
datetime.date(2013, 7, 4),
datetime.date(2013, 7, 5),
datetime.date(2013, 7, 6),
datetime.date(2013, 7, 7),
datetime.date(2013, 7, 8),
datetime.date(2013, 7, 9),
datetime.date(2013, 7, 10),
datetime.date(2013, 7, 11),
datetime.date(2013, 7, 12),
datetime.date(2013, 7, 13),
datetime.date(2013, 7, 14),
datetime.date(2013, 7, 15),
datetime.date(2013, 7, 16),
datetime.date(2013, 7, 17),
datetime.date(2013, 7, 18),
datetime.date(2013, 7, 19),
datetime.date(2013, 7, 20),
datetime.date(2013, 7, 21)]
关于python - 构建上周、本周和下周的日期数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17611774/