我想在python中检查当前时间是否在两个端点之间(例如,上午8:30到下午3:00),而不管实际日期。因为,我不在乎完整的日期是什么;只是一小时。当我使用datetime
创建strptime
个对象来指定时间时,它会投入一个虚拟日期(我认为是1900年?),这不是我想要的。我可以使用像(hour == 8 and minute >= 30) or (9 <= hour < 15)
这样笨拙的布尔表达式,但这看起来并不优雅。什么是最简单,最pythonic的方法来实现这个目标?
进一步扩展,我真正喜欢的东西会告诉我它是否在这个小时范围之间,而且它是工作日。当然我可以使用0 <= weekday() <= 4
来破解这个,但可能有更好的方法。
答案 0 :(得分:12)
datetime
个对象有一个名为time()
的方法,它返回一个time
对象(没有日期信息)。然后,您可以使用普通time
或<
运算符比较>
个对象。
import datetime
import time
timestamp = datetime.datetime.now().time() # Throw away the date information
time.sleep(1)
print (datetime.datetime.now().time() > timestamp) # >>> True (unless you ran this one second before midnight!)
# Or check if a time is between two other times
start = datetime.time(8, 30)
end = datetime.time(15)
print (start <= timestamp <= end) # >>> depends on what time it is
如果您还想检查工作日,您建议的代码可能是最有效的方法,但在这种情况下,您可能不想丢弃原始的datetime
对象。 / p>
now = datetime.datetime.now()
if 0 <= now.weekday() <= 4:
print ("It's a weekday!")
print (start <= now.time() <= end) # with start & end defined as above
答案 1 :(得分:2)
>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2013, 9, 19, 3, 39, 38, 459765)
>>> 0 <= now.weekday() <= 4
True
>>> datetime.time(hour=8, minute=30) <= now.time() <= datetime.time(hour=15)
False
答案 2 :(得分:1)
from datetime import datetime, time
now = datetime.now()
if 0 <= now.weekday() <= 4:
print "it's a weekday"
if time(8, 30) <= now.time() <= time(15):
print "and it's in range"
答案 3 :(得分:0)
我不知道你是如何得到你的开始和结束时间的,但如果你将它限制在一天,那么请确保开始时间在结束时间之前。例如,如果你有开始时间= 1800和结束时间= 1200,那么在那一天你将找不到任何时间。