2012-09-18 62 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() 
相关问题