3

我试图在 Python 中比较两次,如果 last_update 比 time_now 提前 1 小时以上运行一个函数

到目前为止我有

last_update = '01:00:00'
time_now = strftime("%H:%M:%S", gmtime())

time_now= str(time_now)


FMT = '%H:%M:%S'
tdiff = datetime.strptime(time_now, FMT) - datetime.strptime(time_update, FMT)

正确输出时间差。但是我看不到如何在逻辑语句中使用它,例如

if tdiff > 01:00:00 
   ..do stuff..

有任何想法吗..?

4

2 回答 2

4

仅解析时间(无日期)时,您需要将结果对象与今天的日期重新组合:

from datetime import datetime, date, timedelta

dt_update = datetime.combine(date.today(), datetime.strptime(last_update, '%H:%M:%S').time())

如果你不这样做,你最终会1900-01-01得到对象上的日期,但重新组合它可以更容易地将时间与当前时间进行比较。只需datetime.now()将其与以下内容进行比较:

tdiff = datetime.now() - dt_update

现在你有一个timedelta()对象。将其与另一个进行比较timedelta

if tdiff > timedelta(hours=1):
于 2013-05-01T20:08:34.587 回答
1

您应该对它们进行数字比较,而不是通过strftime然后再返回。Datetime 对象已经可以在本地相互比较,所以只需使用这些:

import datetime
    import time

next_update = None
one_hour = datetime.timedelta(hours=1)

def f():
    # Do whatever
    next_update = datetime.datetime.now() + one_hour

while True:
    if datetime.datetime.now() > next_update:
        f()
    time.sleep(3600) # Now sleep for an hour (or whatever).

如果您从文本文件或其他内容中获取 last_updated 参数,请使用strptime将其转换为datetime您已经在做的事情,然后进行比较。

于 2013-05-01T20:08:57.797 回答