如何获得上周五?

LA_*_*LA_ 10 python datetime

以下代码应于上周五16:00:00返回.但它在上周五返回.如何解决?

now = datetime.datetime.now()
test = (now - datetime.timedelta(days=now.weekday()) + timedelta(days=4, weeks=-1))
test = test.replace(hour=16,minute=0,second=0,microsecond=0)
Run Code Online (Sandbox Code Playgroud)

UPD.我现在使用以下方法 - 它是最好的方法吗?

now = datetime.datetime.now()
if datetime.datetime.now().weekday() > 4:
    test = (now - datetime.timedelta(days=now.weekday()) + timedelta(days=4))
else:
    test = (now - datetime.timedelta(days=now.weekday()) + timedelta(days=4, weeks=-1))
test = test.replace(hour=16,minute=0,second=0,microsecond=0)
Run Code Online (Sandbox Code Playgroud)

UPD2.举个例子.我们假设今天是2012年10月5日.如果当前时间等于或小于16:00,则应于2012年9月28日返回,否则 - 201210月5日.

Jon*_*nts 19

dateutil是伟大的事情是这样的:

>>> from datetime import datetime
>>> from dateutil.relativedelta import relativedelta, FR
>>> datetime.now() + relativedelta(weekday=FR(-1))
datetime.datetime(2012, 9, 28, 9, 42, 48, 156867)
Run Code Online (Sandbox Code Playgroud)

  • 如果当天是星期五,我如何通过此代码获得上星期五? (2认同)

moo*_*eep 8

与链接问题一样,您需要使用datetime.date对象而不是datetime.datetime.为了得到一个datetime.datetime,你可以使用datetime.datetime.combine():

import datetime

current_time = datetime.datetime.now()

# get friday, one week ago, at 16 o'clock
last_friday = (current_time.date()
    - datetime.timedelta(days=current_time.weekday())
    + datetime.timedelta(days=4, weeks=-1))
last_friday_at_16 = datetime.datetime.combine(last_friday, datetime.time(16))

# if today is also friday, and after 16 o'clock, change to the current date
one_week = datetime.timedelta(weeks=1)
if current_time - last_friday_at_16 >= one_week:
    last_friday_at_16 += one_week
Run Code Online (Sandbox Code Playgroud)