如何根据使用Python的当前日期找到上周一的日期?我想也许我可以使用:datetime.weekday()做到这一点,但我卡住了.
我基本上想找到今天的日期和星期一日期,使用以下方法在django中构建日期范围查询:created__range=(start_date, end_date).
Chr*_*heD 148
>>> import datetime
>>> today = datetime.date.today()
>>> today + datetime.timedelta(days=-today.weekday(), weeks=1)
datetime.date(2009, 10, 26)
Run Code Online (Sandbox Code Playgroud)
一些解释的话:
以今天为准.减去本周已经过去的天数(这会让你"上次"星期一).加一周.
编辑:上面是'下周一',但是因为你正在寻找'最后一个星期一'你可以使用
today - datetime.timedelta(days=today.weekday())
Run Code Online (Sandbox Code Playgroud)
Ste*_*ham 39
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而导致的任何混淆.
die*_*us9 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
Run Code Online (Sandbox Code Playgroud)
注意:OP在评论中说," 我在寻找过去的星期一 ".我认为这意味着我们正在寻找在今天之前发生的最后一个星期一.
仅使用datetime模块进行计算有点困难(特别是考虑到"过去星期一"的上述解释以及如果您希望避免使用笨重if-statements).例如,如果today是星期一,如2013-12-23,
today - DT.timedelta(days=today.weekday())
Run Code Online (Sandbox Code Playgroud)
返回2013-12-23,与today(不是过去的星期一)同一天.
使用dateutil模块的优点是您不必进行棘手的心理计算,也不必强迫读者做同样的事情以获得正确的日期.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
Run Code Online (Sandbox Code Playgroud)
请注意,days=-1需要保证past_monday与其不同的一天today.
对于未来出现在此页面上寻找获取“最近的星期日”而不是“最近的星期一”的方法的 Google 用户,您需要做一些额外的数学运算,因为 datetime.weekday() 将星期一视为第一天一周中的:
today = datetime.date.today()
weekday = today.weekday() + 1
start_day = today - datetime.timedelta(days=weekday % 7)
Run Code Online (Sandbox Code Playgroud)
如果今天是星期二,则设置start_day为上星期日。如果今天是星期日,则设置start_day为今天。% 7如果您希望“上周日”是一周前(如果当前是周日),请去掉“上周日”。
| 归档时间: |
|
| 查看次数: |
34951 次 |
| 最近记录: |