我想编写一个简单的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日?
答案 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
为否定timedelta
,total_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()