如何获得正确的下一次执行时间作为 celery is_due 方法的日期时间?

How can I get correct next execution time as datetime form celery is_due method?

celery.schedules.crontabis_due方法returns下一次执行时间秒
但是当我们得到秒时间并用日期时间计算时,结果是错误的。
这是代码:

from celery.schedules import crontab
from datetime import datetime, timedelta
c = crontab(0, 0, day_of_month=2)
now = datetime.utcnow().replace(year=2015,month=7,day=31)
r = c.is_due(now)
execution_time = now + timedelta(seconds=r.next)
print(execution_time)
>>> 2015-08-29 23:59:59.999605

我希望这段代码应该 returns 2015-08-02....
为什么时间不同?可能是我的计算过程出了问题。
能告诉我正确的计算过程吗?

我不太了解crontab的内部,但是传递给is_due的正确参数[第一次调用is_due()]是当前时间,比如c.is_due(datetime.now()).否则,is_due 将 return schedstate(is_due=True, next=...)