Выявление перекрывающихся правил повторения даты - PullRequest
3 голосов
/ 01 сентября 2011

Я работаю в приложении, которое выглядит как Календарь Google, но с одним основным отличием: события не должны пересекаться с другими событиями.Это означает, что никакие два события не могут разделять общее время, даже в минутах детализации.Это особенно полезно для календаря, в котором хранятся только собрания, поскольку невозможно быть одновременно в двух собраниях.

Как и в Календаре Google, события могут создаваться с использованием правил повторения (каждую пятницу и воскресенье).например, с 10 до 13 часов).Поэтому я хотел бы обнаружить перекрывающиеся события, используя только rrules (из модуля python-dateutil), без необходимости создавать N объектов datetime и проверять их на предмет пересечения.

Можно ли обнаружить перекрывающиеся даты, используя только правила?Есть ли что-то подобное, уже реализованное в другой библиотеке?

1 Ответ

3 голосов
/ 08 сентября 2011

Нет, я не верю, что можно проанализировать правило, чтобы увидеть, может ли оно пересечь другое без создания объектов datetime.

По сути, вы запрашиваете вывод алгоритма без запуска алгоритма, и я думаю, что он не вычисляем.

Однако для некоторых типов правил это возможно, например, Правило каждого четверга не может пересекать Правило каждого вторника. Проблемными являются дни месяца и дни года, пересекающиеся с днями недели, и частоты, которые никогда не пересекаются.

Лучше всего было бы сделать правила, которые аналитически проверяемы аналитически, затем для других генерировать данные следующего года или около того и сравнивать вручную.

Алгоритм может работать быстро, поскольку при добавлении каждого правила вы можете кэшировать существующее время занятости.

...