4

我经常在 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)]
4

3 回答 3

5

不,差不多就是这样。但是基于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)]
于 2013-07-12T09:43:13.050 回答
3

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

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)]
于 2013-07-12T09:43:36.477 回答
1

datetime模块对以下操作有一些支持:

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
于 2013-07-12T09:42:31.330 回答