在python中找到上周/上周五的星期五

Jib*_*bin 16 python datetime

[点拨.假设我有一天4/30/07.然后我需要得到4/27/07.

EG2.假设我有一天6/29/07.然后我需要得到6/22/07.

Thi*_*ter 38

假设day是一个datetime.date或一个datetime.datetime对象,这段代码为上周的周五创建一个datetime/ date对象:

friday = day - timedelta(days=day.weekday()) + timedelta(days=4, weeks=-1)
Run Code Online (Sandbox Code Playgroud)

说明:timedelta(days=day.weekday())是星期一之间的偏移,day所以增加4天并减去一周会得到你上周五的星期五.

当然你可以简化这个(+4d -1w = -3d):

friday = day - timedelta(days=day.weekday() + 3)
Run Code Online (Sandbox Code Playgroud)

注意:获取timedelta,使用from datetime import timedelta或仅import datetime使用datetime.timedelta

  • 这在周六和周日不起作用.试试这个:`friday = day - timedelta(days =(day.weekday() - 4)%7,weeks = -1)` (5认同)
  • 我的代码应该是`weeks = 0`(或省略参数).我错过了.此外,期望的结果取决于"上一周/上周"的含义以及是否定义从星期日或星期一开始的星期.我可能误解了这个问题.我的(更正的)代码给出了最近的星期五. (2认同)

小智 20

另一种更简单的方法是使用python-dateutil.要获得上周五:

>>> from dateutil.relativedelta import relativedelta, FR
>>> from datetime import datetime
>>> datetime(2015, 7, 8) + relativedelta(weekday=FR(-1))
datetime.datetime(2015, 7, 3, 0, 0)
Run Code Online (Sandbox Code Playgroud)

下周五:

>>> datetime(2015, 7, 8) + relativedelta(weekday=FR(+1))
datetime.datetime(2015, 7, 10, 0, 0)
Run Code Online (Sandbox Code Playgroud)

  • 这应该是最重要的答案,不是吗? (2认同)