Итак, у меня есть список событий, похожих на сигналы тревоги. Они определяются временем начала и окончания (в часах и минутах), диапазоном дней (т.е. 1-3, с воскресенья по среду) и диапазоном месяцев (т.е. с 1-3, с января по март). Формат этих данных практически неизменен. Мне нужно не обязательно сортировать список, но мне нужно найти следующее предстоящее событие на основе текущего времени. Есть так много разных способов сделать это и так много разных угловых случаев. Это мой псевдокод:
now = time()
diff = []
# Start difference between now and start times
for s in schedule #assuming appending to diff
diff.minutes = s.minutes - time.minutes #
diff.hours = s.hours - time.hours
diff.days = s.days - time.days
diff.months = s.months - time.months
for d in diff
if d < 0
d = period + d
# period is the maximum period of the attribute. ie minutes is 60, hours is 24
# repeat for event end times
Итак, теперь у меня есть список кортежей разностей в часах, минутах, днях и неделях. Этот кортеж уже учитывает, прошло ли время начала, но до времени окончания. Допустим, сейчас август, месяц начала мероприятия — июль, а месяц окончания — сентябрь, так что diff.month == 0
.
Теперь этот конкретный угловой случай доставляет мне проблемы:
Допустим, расписание работает с 0 до 23:59 по четвергам в августе. И это пятница 27-е. При запуске моего алгоритма разница в месяцах будет равна 0, тогда как на самом деле он не будет работать снова до следующего августа, поэтому должно быть 12. И я застрял. Месяц - единственная проблема, я думаю, потому что месяц - это единственный атрибут, который напрямую зависит от даты конкретного месяца (а не только от дня). В порядке ли мой алгоритм, и я могу просто справиться с этим особым случаем? Или есть что-то лучше для этого?
Это данные, с которыми я работаю
map['start_time']=''
map['end_time']=''
map['start_moy']=''
map['end_moy']=''
map['start_dow']=''
map['end_dow']=''
Метод getAllSchedules расписания просто возвращает список всех расписаний. Я могу изменить класс расписания, но я не уверен, что это может изменить. Я не могу добавить/изменить формат предоставленных мне расписаний