用Python查找周一的date

如何根据当前使用Python的datefind上个星期一的date? 我想也许我可以使用: datetime.weekday()来做到这一点,但我陷入困境。

我基本上想要find今天的date和星期一的date,以在django中使用: created__range=(start_date, end_date)来构builddate范围查询。

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

一些解释的话:

采取今天的date。 减去本周已经过去的天数(这会让你'上个星期一')。 加一个星期。

编辑 :以上是“下一个星期一”,但是因为你正在寻找“最后一个星期一”,你可以使用

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

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

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

 >>> 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而导致的任何混淆。

我认为最简单的方法是使用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 

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

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

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

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

使用dateutil模块的好处在于,您不必进行棘手的心理计算,也不会强迫读者去做相同的date。 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不同。

你可以用Natty 。 我试过parsedatetimedateparser 。 比较这三个,我觉得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

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

使用timedeltas和datetime模块:

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

给你星期一的星期几,星期一到星期六(星期一)

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

(7-d)%7给你直到星期一的日子,或者如果今天是星期一,则让你离开你