0

Im unable to create recurrence python events after every user defined hour in a day. Recurrence only returns me 1 event not after every defined hour.

e.g If I want to create a job of cleaning after every 2 hour in system. so if current hour is 13, events should create for these hours 15, 17, 19, 21, 23. but my code create only 1 job for a day.

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

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

let suppose start hour would be 13th.

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.
M Usman Wahab
  • 53
  • 1
  • 10

1 Answers1

0

The prime culprit in your code was time, your start_date and end_date has the same time which was hours=0, minutes=0. That was causing the problem to generate occurrence. The below code is working fine according to your need. Please created start_date according to starting hours and in end_date define the last hour of the day.

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)
Malik Faiq
  • 433
  • 6
  • 18