6

我想编写一个简单的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 日检查?

4

4 回答 4

7
now = datetime.now()
mystart = now.replace(hours=10, minutes=55, seconds=0)
myend = mystart + timedelta(minutes=2)
if mystart <= mydate < myend:
    # do your stuff
于 2012-09-18T19:56:29.947 回答
0

它可能有点骇人听闻,但您可以使用它.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

于 2012-09-18T20:00:03.397 回答
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()
于 2012-09-18T21:09:37.643 回答
0

像这样更改您的代码

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

if mydate > current_date and check < datetime.timedelta(minutes=2):
     run_myfunction()
于 2012-09-18T19:57:03.027 回答