如何根据使用Python的当前日期找到上周一的日期?我想也许我可以使用datetime.weekday()
来做,但是我被卡住了。
我基本上想找到今天的日期和星期一日期,使用:created__range=(start_date, end_date)
在django中构建日期范围查询。
答案 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_monday
与today
不同。
答案 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给你几天到星期一,或者如果今天是星期一就离开你的位置