# -*- coding: utf-8 -*-
from croniter import croniter
from datetime import datetime, timedelta
def get_timedelta(base_cron=None, parent_cron=None, days=None):
base_cron = '00 04 * * *' if base_cron is None else base_cron
parent_cron = '30 01 * * *' if parent_cron is None else parent_cron
days = 0 if days is None else days
now = datetime.now()
base_day = datetime(now.year, now.month, now.day)
parent_day = base_day + timedelta(days=days)
base_iter = croniter(base_cron, base_day)
parent_iter = croniter(parent_cron, parent_day)
return base_iter.get_next(datetime) - parent_iter.get_next(datetime)
def say_hello():
# every 5 minutes
cron = '*/5 * * * *'
# 验证cron表达式
is_valid = croniter.is_valid(cron)
print(is_valid)
# True
# 执行计划
base = datetime(2010, 1, 25, 4, 46)
iter = croniter(cron, base)
print(iter.get_next(datetime)) # 2010-01-25 04:50:00
print(iter.get_next(datetime)) # 2010-01-25 04:55:00
print(iter.get_next(datetime)) # 2010-01-25 05:00:00
if __name__ == '__main__':
base = '00 04 * * *'
parent = '00 3 * * *'
r = get_timedelta(base, parent, 0)
print(r) # 1:00:00
print(type(r)) # <class 'datetime.timedelta'>
Python使用cron表达式
最新推荐文章于 2025-05-12 12:32:22 发布