如何判断Python的datetime对象now是否处于同一周周五17点至周日17点?
简便判断datetime对象是否处于周五17:00至周日17:00之间
你之前的代码逻辑错在把两个矛盾的条件用and连接了——它要求时间同时满足“周五17点后”和“周日17点前”,但实际上我们需要的是分场景判断:周五17点及之后、周六全天、周日17点及之前这三个情况中的任意一种。
下面是几种简便的实现方式:
方式一:分分支直观判断
import datetime now = datetime.datetime.now() weekday = now.isoweekday() # 1代表周一,7代表周日 target_time = datetime.time(17, 0) is_in_target_window = False if weekday == 5: # 周五:时间>=17:00就算符合 is_in_target_window = now.time() >= target_time elif weekday == 6: # 周六:全天都符合 is_in_target_window = True elif weekday == 7: # 周日:时间<=17:00就算符合 is_in_target_window = now.time() <= target_time print(is_in_target_window)
方式二:简化为一行逻辑表达式
把分支逻辑合并成一个表达式,代码更紧凑:
import datetime now = datetime.datetime.now() weekday = now.isoweekday() target_time = datetime.time(17, 0) is_in_target_window = (weekday == 5 and now.time() >= target_time) or \ (weekday == 6) or \ (weekday == 7 and now.time() <= target_time) print(is_in_target_window)
方式三:时间区间直接比较
如果不想分星期判断,可以先算出本周周五17点和周日17点的具体datetime对象,再直接判断now是否在这个区间内:
import datetime now = datetime.datetime.now() # 先找到本周一的日期 monday = now - datetime.timedelta(days=now.isoweekday() - 1) # 推导周五17:00的时间 friday_17 = monday + datetime.timedelta(days=4, hours=17) # 推导周日17:00的时间 sunday_17 = friday_17 + datetime.timedelta(days=2) # 直接判断now是否在[周五17:00, 周日17:00]区间内 is_in_target_window = friday_17 <= now <= sunday_17 print(is_in_target_window)
这个方法的好处是逻辑更直观,不需要处理星期分支,但要注意如果涉及时区,需要确保所有时间都是同一时区的。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

