上周五怎么样? [英] How to get last Friday?
问题描述
下面的代码将在上周五16:00:00返回。但是它返回上周五的星期五。如何修复?
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 - datetime.timedelta(days=now.weekday()) + timedelta(days=4, weeks=-1))
test = test.replace(hour=16,minute=0,second=0,microsecond=0)
更新。我现在使用以下方法 - 是最好的吗?
Upd. I use the following approach now - is it the best one?
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)
Upd2。举个例子。假设今天是2012年10月5日。如果当前时间等于或小于16:00 ,它应该返回2012年9月28日,否则 - 2012年10月5日。 / p>
Upd2. Just to give an example. Let's assume that today is Oct 5, 2012. In case current time is equal to or less than 16:00 it should return Sep 28, 2012, otherwise - Oct 5, 2012.
推荐答案
与链接的问题一样,您需要使用 datetime.date
对象而不是 datetime.datetime
。要得到一个 datetime.datetime
,你可以使用 datetime.datetime.combine()
:
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
这篇关于上周五怎么样?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!