Итак, у меня есть список событий, которые похожи на сигналы тревоги. Они определяются временем начала и окончания (в часах и минутах), в течение нескольких дней (например, 1-3, которое происходит через воскресенье) и в течение нескольких месяцев (т.е. 1-3, январь за маршем). Формат этих данных в значительной степени неизменен. Мне нужно, не обязательно сортировать список, но мне нужно найти следующее предстоящее событие, основанное на текущем времени. Существует так много разных способов сделать это и так много разных угловых случаев. Это мой псевдо-код:Сортировка запланированных событий python
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 просто возвращает список для всех графиков. Я могу изменить класс расписания, но я не уверен, какая разница я могу там сделать. Я не могу добавить/изменить формат расписаний, которые мне даны
Батареи включены. Используйте математику datetime. http://docs.python.org/library/datetime.html – msw