如何比较两个小时

2024-07-05 14:32:45 发布

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

我需要调用一个函数,正好是08:00, 18:00, 22:00小时。我创建了一个例子来测试小时之间的比较。当当前时间到达其中一个时间。放在While循环中,认为这个例子可以作为秒表使用,但我认为我错了。如何比较这些价值观是最好的方法?在

currentH= dt.datetime.now().strftime("%H:%M:%S")
h = "16:15:10"
while True:
    if(currentH==h):
        print 'Ok'
print 'The current Hour is: '+h

Tags: 方法函数datetime时间dtnow例子print
2条回答
import datetime as dt
import time
currentH= dt.datetime.now().replace(microsecond=0).time()

hrs = ['00:02', '12:00']
for i in range(len(hrs)):
    h = [int(x) for x in hrs[i].split(':')]
    h = dt.datetime.now().replace(hour=h[0], minute=h[1], second=0,microsecond=0).time()
    hrs[i] = h

while True:
    currentH = dt.datetime.now().replace(microsecond=0).time()
    print(currentH)
    if currentH in hrs:
        print('Time is now',currentH)
    time.sleep(1)

您的代码最大的问题是,您永远不会在循环内再次调用now(),因此您只是在将初始时间与16:15:10进行比较而永远旋转。在

当我们在做的时候:为什么要把时间转换成字符串进行比较,而不是仅仅比较时间?在

但这种设计有更大的问题,不容易解决。在

如果你在16:15查看时间,然后睡觉,然后在16:25醒来,会发生什么?那么now()永远不会返回16:15:10。在

另外,你真的想消耗100%的CPU 10小时吗?在

更好的解决方案是编写sleep_until函数:

def sleep_until(target):
    left = target - dt.datetime.now()
    if left > dt.timedelta(seconds=0):
        time.sleep(left.total_seconds())

(如果使用的是Python2.7或3.4,则会更复杂一些,因为如果有信号,sleep将提前唤醒。但要处理这种情况,只需在整个过程中添加一个while True:循环。)

现在,唯一棘手的一点是计算出你第一次需要睡觉的时间,这并不复杂:

^{pr2}$

现在,我们只需循环等待,直到下一次:

for wait in waits:
    sleep_until(start)
    print('Time to make the donuts')
    start += wait

或者,当然,您可以从PyPI获取许多调度库中的一个。在

或者只需使用平台的cron/launchd/Scheduled Tasks API来运行脚本。在

相关问题 更多 >