6

特定の時間/分の2分前かどうかを確認し、毎日または特定の日付の特定の時間に関数を呼び出す簡単なpythonスクリプトを作成したいと思います。

スクリプトは cronjob で毎分実行されます。

したがって、myfunction() を実行する 2 つのケース:

毎日
10:55 2012/9/28 10:55

しかし、datetime を使用して、指定された時間/分の 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 分以内かどうかを確認し、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

このようにコードを変更します

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 に答える
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 に答える