如果我在一天中的某个时间范围内,如何签入python?

2024-05-15 05:17:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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

再延伸一点,我真正想要的是告诉我,如果是在这个时间范围内,而且是一个工作日。当然,我可以使用0 <= weekday() <= 4来破解这个问题,但可能有更好的方法。


Tags: orand对象方法datetime表达式方式时间
3条回答
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"

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对象。

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
>>> 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

相关问题 更多 >

    热门问题