用Python查找星期一的日期

时间:2009-10-25 20:53:48

标签: python django

如何根据使用Python的当前日期找到上周一的日期?我想也许我可以使用datetime.weekday()来做,但是我被卡住了。

我基本上想找到今天的日期和星期一日期,使用:created__range=(start_date, end_date)在django中构建日期范围查询。

8 个答案:

答案 0 :(得分:141)

>>> import datetime
>>> today = datetime.date.today()
>>> today + datetime.timedelta(days=-today.weekday(), weeks=1)
datetime.date(2009, 10, 26)

一些解释词:

今天约会。减去本周已经过去的天数(这会让你“上次”星期一)。加一周。

修改:以上是“下周一”,但由于您正在寻找'上周一',您可以使用

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

答案 1 :(得分:36)

ChristopheD的帖子接近你想要的。我没有足够的代表发表评论:(

而不是(实际上给你下一个即将到来的星期一):

>>> today + datetime.timedelta(days=-today.weekday(), weeks=1)
datetime.date(2009, 10, 26)

我会说:

>>> last_monday = today - datetime.timedelta(days=today.weekday())

如果您想要前一周,请添加'weeks = 1'参数。

这使得代码更具可读性,因为您正在减去timedelta。这清除了因添加具有负偏移和正偏移的timedelta而导致的任何混淆。

答案 2 :(得分:20)

我认为最简单的方法是使用python-dateutil这样:

from datetime import date
from dateutil.relativedelta import relativedelta, MO

today = date.today()
last_monday = today + relativedelta(weekday=MO(-1))
print last_monday

答案 3 :(得分:8)

注意:OP在评论中说“我在寻找上周一”。我认为这意味着我们正在寻找在今天之前发生的最后一个星期一。

仅使用datetime模块进行计算有点困难(特别是考虑到“过去星期一”的上述解释,并且如果您希望避免使用笨重的if-statements)。例如,如果today是星期一,例如2013-12-23

today - DT.timedelta(days=today.weekday())

返回2013-12-23,与today同一天(不是过去的星期一)。

使用dateutil module的好处是,您不必进行棘手的心理计算,也不会强迫读者做同样的事情以获得正确的日期。 dateutil为您完成所有工作:

import dateutil.relativedelta as rdelta
import datetime as DT

today = DT.date(2013, 12, 23)  # Monday

past_monday = today + rdelta.relativedelta(days=-1, weekday=rdelta.MO(-1))
print(past_monday)
# 2013-12-16

next_monday = today + rdelta.relativedelta(days=1, weekday=rdelta.MO(+1))
print(next_monday)
# 2013-12-30

请注意,days=-1需要保证past_mondaytoday不同。

答案 4 :(得分:1)

您可以使用 Natty 。我尝试了 parsedatetime dateparser 。比较这三个,我认为 Natty 是最好的。

要获得结果,请按以下方式使用:

>>> from natty import DateParser
>>> dp = DateParser('last monday')
>>> dp.result()
[datetime.datetime(2016, 8, 1, 17, 35, 5, tzinfo=tzlocal())] #Today is 9th of August 2016 5.35 PM

Github链接:https://github.com/eadmundo/python-natty

尝试一下,它可以做得更多!

答案 5 :(得分:1)

对于出现在此页面上寻找获取“最近星期天”而不是“最近一个星期一”的未来google的人,你需要做一些额外的数学运算,因为datetime.weekday()将星期一视为一周的第一天:

today = datetime.date.today()
weekday = today.weekday() + 1
start_day = today - datetime.timedelta(days=weekday % 7)

如果今天是星期二,则将start_day设置为上周日。如果今天是星期日,则会将start_day设置为今天。如果您希望“上周日”成为一周前的话,请将% 7带走,如果它当前是星期天的话。

答案 6 :(得分:0)

使用timedeltas和datetime模块:

import datetime
datetime.date.today()+datetime.timedelta(days=-datetime.date.today().weekday())

答案 7 :(得分:0)

d = datetime.datetime.today().weekday()

给你今天的星期几,计算0(星期一)到6(星期日)

datetime.datetime.today() + datetime.timedelta(days=(7-d)%7)

(7-d)%7给你几天到星期一,或者如果今天是星期一就离开你的位置