检查时间是否在某一分钟内的最佳方法是什么?

时间:2012-09-18 19:51:13

标签: python

我想编写一个简单的python脚本,它将检查它是否在给定的小时/分钟前2分钟,然后在给定时间每天或给定日期调用我的函数。

脚本将在cronjob中每分钟运行一次。

所以执行myfunction()的两种情况:

每天10:55每天 2012年9月28日10:55

但我在使用日期时间确定在给定小时/分钟之前2分钟时遇到问题。另外,如何确定每天与仅在某一天?

mydate = datetime(2012, 09,28, 10,55)
check = mydate - datetime.now()    # gives you a timedelta

if check < datetime.timedelta(minutes=2):
     run_myfunction()

上面看到它是否在2分钟内,如果是,则运行myfunction()。上面代码的问题是如果mydate已经通过,myfunction()仍然会运行。此外,这需要指定特定日期。如何让每天检查而非2012年9月28日?

3 个答案:

答案 0 :(得分:3)

now = datetime.now()
mystart = now.replace(hours=10, minutes=55, seconds=0)
myend = mystart + timedelta(minutes=2)
if mystart <= mydate < myend:
    # do your stuff

答案 1 :(得分:0)

可能是hackish,但您可以使用.total_seconds()来构建范围:

from datetime import datetime, timedelta

then = datetime(2012, 9, 18, 16, 5)
now = datetime.now()
delta = timedelta(minutes=10)

if 0 < (then - now).total_seconds() < delta.total_seconds():
    # ...

这样,如果then - now为否定timedeltatotal_seconds()将返回一个负数,并使您的条件为False

答案 2 :(得分:0)

对于日常部分,您可以使用

reference = datetime.datetime(2012,9,18,23,55,00)
now = datetime.datetime.now()
today = reference.replace(year=now.year,month=now.month,day=now.day)

时差:

delta = (now-today)
lapse = delta.days * 86400 + delta.seconds
if abs(lapse) <= 2*60:
    run_function()