Python:如何比较两个小时

时间:2018-06-20 19:45:57

标签: 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

2 个答案:

答案 0 :(得分:0)

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)

答案 1 :(得分:0)

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

我们正在这么做:为什么将时间转换为字符串以进行比较,而不只是比较时间?

但是这种设计存在较大的问题,无法轻易解决。

如果您检查16:15的时间,然后入睡,然后在16:25醒来,会发生什么?然后now()从不返回16:15:10。

还,您是否真的想在10个小时内消耗100%的CPU?

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

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

(如果您使用的是Python 2.7或3.4,则要复杂一些,因为如果有信号,sleep会早起。但是要处理这种情况,您只需添加一个{{1 }}遍历整个内容。

现在,唯一棘手的问题是您第一次需要睡觉之前要进行锻炼,这并不是那么棘手:

while True:

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

waits = itertools.cycle(dt.timedelta(hours=wait) for wait in (10, 4, 10))
now = dt.datetime.now()
start = dt.datetime.combine(dt.date.today(), dt.time(hour=8))
for wait in waits:
    start += wait
    if start > now:
       break

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

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