以下代码应于上周五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日返回,否则 - 2012年10月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)
与链接问题一样,您需要使用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)