如果我在一天中的特定时间范围内如何检查python?

时间:2013-09-18 23:29:51

标签: python datetime

我想在python中检查当前时间是否在两个端点之间(例如,上午8:30到下午3:00),而不管实际日期。因为,我不在乎完整的日期是什么;只是一小时。当我使用datetime创建strptime个对象来指定时间时,它会投入一个虚拟日期(我认为是1900年?),这不是我想要的。我可以使用像(hour == 8 and minute >= 30) or (9 <= hour < 15)这样笨拙的布尔表达式,但这看起来并不优雅。什么是最简单,最pythonic的方法来实现这个目标?

进一步扩展,我真正喜欢的东西会告诉我它是否在这个小时范围之间,而且它是工作日。当然我可以使用0 <= weekday() <= 4来破解这个,但可能有更好的方法。

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,那么在那一天你将找不到任何时间。