首页 > 解决方案 > Python 创建重复事件

问题描述

在一天中每个用户定义的小时后,我无法创建重复的 python 事件。Recurrence 仅在每个定义的小时后返回我 1 个事件。

例如,如果我想在系统中每 2 小时创建一次清洁工作。因此,如果当前时间为 13,则应在 15、17、19、21、23 小时创建事件。但我的代码一天只创建 1 个工作。

start_date = datetime.now().date()
end_date = start_date

start_date = datetime.combine(start_date, time())           
end_date = datetime.combine(end_date, time())

假设开始时间是 13 号。

start_hour = 13
interval = 2  # after two hours.

by_hours = tuple(hour for hour in range(start_hour +
interval, 24, interval))

rule = recurrence.Rule(freq=4,  # 4 use for Hourly freq. in recurrence.
 until=end_date, byhour=by_hours)

pattern = recurrence.Recurrence(dtstart=start_date,
 rrules=(rule,),
 dtend=end_date)


for event in pattern.occurrences():
    print(event)  # only 1 event prints, need 4 events as per requirement.

标签: pythonpython-3.xpython-2.7recurrencerecurring-events

解决方案


您的代码中的罪魁祸首是时间,您的 start_date 和 end_date 具有相同的时间,即小时 = 0,分钟 = 0。这导致问题发生。下面的代码可以根据您的需要正常工作。请根据开始时间创建 start_date,并在 end_date 中定义一天中的最后一小时。

from datetime import datetime, time, timedelta
start_date = datetime.now().date()
end_date = start_date

start_date = datetime.combine(start_date, time())
start_date = start_date + timedelta(hours=13)
end_date = datetime.combine(end_date, time())
end_date = end_date + timedelta(hours=23, minutes=59)

rule = recurrence.Rule(freq=HOURLY, until=end_date, interval=2, dtstart=start_date)
pattern = recurrence.Recurrence(dtstart=start_date,
rrules=(rule,), dtend=end_date)

推荐阅读