Find Monday's date with Python
如何使用python根据当前日期查找上一个星期一的日期?我想也许我可以用:
我基本上想找到今天的日期和周一的日期,用:
1 2 3 4 | >>> import datetime >>> today = datetime.date.today() >>> today + datetime.timedelta(days=-today.weekday(), weeks=1) datetime.date(2009, 10, 26) |
一些解释:
今天的约会。减去本周已经过去的天数(这将使您"上一个"星期一)。增加一周。
编辑:上面是"下星期一",但是既然你在找"上星期一",你可以用
1 | today - datetime.timedelta(days=today.weekday()) |
号
克里斯托夫的职位接近你想要的。我没有足够的代表发表评论:(
而不是(实际上是下一个星期一):
1 2 | >>> today + datetime.timedelta(days=-today.weekday(), weeks=1) datetime.date(2009, 10, 26) |
我会说:
1 | >>> last_monday = today - datetime.timedelta(days=today.weekday()) |
。
如果需要上一周,请添加"weeks=1"参数。
这使得代码更加可读,因为您要减去一个时间增量。这可以清除添加具有负偏移量和正偏移量的时间增量所导致的任何混乱。
我认为最简单的方法是像这样使用python-dateutil:
1 2 3 4 5 6 | from datetime import date from dateutil.relativedelta import relativedelta, MO today = date.today() last_monday = today + relativedelta(weekday=MO(-1)) print last_monday |
注:运营商在评论中说,"我在寻找过去的周一"。我认为这意味着我们正在寻找严格发生在今天之前的最后一个星期一。
仅使用
1 | today - DT.timedelta(days=today.weekday()) |
。
返回
使用dateutil模块的好处是,您不必进行复杂的心理计算,也不必强迫读者做同样的事情来获得正确的日期。
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
。
注意,需要
对于未来出现在该页面上的谷歌用户,如果想找到一种方法来获取"最近的星期日",而不是"最近的星期一",则需要进行一些额外的计算,因为datetime.week day()将星期一视为一周的第一天:
1 2 3 | today = datetime.date.today() weekday = today.weekday() + 1 start_day = today - datetime.timedelta(days=weekday % 7) |
号
如果今天是星期二,这将使
你可以用Natty。我尝试了parsedatetime和dateparser。比较这三个,我认为纳蒂是最好的。
要获得结果,请按如下方式使用:
1 2 3 4 | >>> 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
试试看,它能做得更多!
使用TimeDelta和日期时间模块:
1 2 | import datetime datetime.date.today()+datetime.timedelta(days=-datetime.date.today().weekday()) |
1 | d = datetime.datetime.today().weekday() |
。
给您一周中的今天,从0(星期一)到6(星期日)计数
1 | datetime.datetime.today() + datetime.timedelta(days=(7-d)%7) |
(7-D)%7给您星期一之前的天数,如果今天是星期一,则离开您所在的位置