The code below should return last Friday, 16:00:00. But it returns Friday of previous week. How to fix that?
now = datetime.datetime.now()
test = (now - date
As in the linked question, you need to use datetime.date
objects instead of datetime.datetime
. To get a datetime.datetime
in the end, you can use 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