如何根據當前使用Python的日期查找上一個星期一的日期?我想也許我可以使用:datetime.weekday()
來做到這一點,但我陷入困境。使用Python查找星期一的日期
我基本上想找到今天的日期和星期一的日期,在django中使用:created__range=(start_date, end_date)
構造日期範圍查詢。
如何根據當前使用Python的日期查找上一個星期一的日期?我想也許我可以使用:datetime.weekday()
來做到這一點,但我陷入困境。使用Python查找星期一的日期
我基本上想找到今天的日期和星期一的日期,在django中使用:created__range=(start_date, end_date)
構造日期範圍查詢。
>>> 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())
Python非常棒:)在大多數其他語言中,這很難並且不平凡。 – 2012-04-26 05:39:12
實際上並沒有回答上週一不是下週一的問題 – 2015-02-09 11:08:32
@GeraldKaszuba實際上它在PHP中更容易和更具可讀性:'new DateTime(「last weekday」)''或'strtotime(「last weekday」)''。 – JustAC0der 2017-01-11 09:13:39
使用timedeltas和日期模塊:
import datetime
datetime.date.today()+datetime.timedelta(days=-datetime.date.today().weekday())
d = datetime.datetime.today().weekday()
給你星期一的今天,計0(星期一)至6(星期日)
datetime.datetime.today() + datetime.timedelta(days=(7-d)%7)
(7-d)%7爲您提供了天,直到週一,或離開你,你是,如果今天是星期一
注: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
。
您正在使用簡單的工具; – diegueus9 2013-12-24 14:42:14
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而導致的混淆和積極的抵消。
+1爲您的未來評論privs! – physicsmichael 2009-10-26 16:36:29
Whooohooo,我現在可以發表評論!謝謝。 – 2009-10-26 20:52:25
我認爲最簡單的方法是使用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
您可以使用納蒂。我試過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
試試,它可以做更多!
對於未來在此頁面上顯示的Google搜索尋找獲取「最近的星期天」的方法,而不是「最近的星期一」,您需要做一些額外的數學運算,因爲datetime.weekday()作爲一週的第一天:
today = datetime.date.today()
weekday = today.weekday() + 1
start_day = today - datetime.timedelta(days=weekday % 7)
假如今天是星期二,這臺start_day
到最後一個星期日。如果今天是星期天,則今天設置start_day
到。如果您希望「上週日」在一週之前(如果當前是星期日),請帶走% 7
。
週一或週一到來? – 2009-10-25 21:00:20
我一直在尋找過去的星期一 – Joe 2009-10-25 21:21:15