上周五怎么去?

2024-09-25 00:28:32 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码应该在上周五16:00:00返回。但它返回Friday of previous week。怎么解决?

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)

升级版。我现在用下面的方法-这是最好的方法吗?

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)

升级版2。举个例子。假设今天是2012年10月5日。如果当前时间等于或小于16:00则应返回2012年9月28日,否则-2012年10月5日


Tags: 方法代码testdatetimedaysnowreplacetimedelta
3条回答

这是从乔恩·克莱门茨那里借来的,但这是一个完整的解决方案:

>>> from datetime import datetime
>>> from dateutil.relativedelta import relativedelta, FR
>>> lastFriday = datetime.now() + relativedelta(weekday=FR(-1))
>>> lastFriday.replace(hour=16,minute=0,second=0,microsecond=0)
datetime.datetime(2012, 9, 28, 16, 0, 0, 0)

^{} library非常适合这样的事情:

>>> 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)

在链接的问题中,您需要使用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

相关问题 更多 >