2012-09-18 97 views
2

我想寫一個簡單的python腳本,它將檢查是否在給定的小時/分鐘前2分鐘,然後每天或在給定時間給定日期調用我的函數。什麼是檢查時間是否在一定時間內的最佳方法?

該腳本將在cronjob中每分鐘運行一次。

所以這兩種情況執行MyFunction的():

10:55日常
10:55在2012年9月28日

但我無法確定時,它的前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()仍然會運行。此外,這需要指定一個特定的日期。怎麼會允許每天檢查而不是9/28/2012?

+1

你爲什麼不通過的cronjob讓10:55腳本運行的日常? – moooeeeep

+0

謝謝你們,我剛剛帶着分鐘= 0進行了檢查。猜猜我在發佈之前應該多想一想! – user1636922

回答

1
now = datetime.now() 
mystart = now.replace(hours=10, minutes=55, seconds=0) 
myend = mystart + timedelta(minutes=2) 
if mystart <= mydate < myend: 
    # do your stuff 
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() 
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

+0

自Python 2.7以來'total_seconds()'可用 – moooeeeep

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() 
相關問題