检测重叠的日期重复规则
我正在开发一个类似于谷歌日历的应用程序,但有一个主要的不同点:事件之间不能有重叠。这意味着任何两个事件都不能在同一时间发生,哪怕是几分钟的差别也不行。这对于只存储会议的日历特别有用,因为你不可能同时参加两个会议。
就像谷歌日历一样,事件可以通过重复规则来创建(比如每周五和周日的上午10点到下午1点)。所以我想通过使用rrules(这是一个python-dateutil模块)来检测重叠的事件,而不需要创建多个日期时间对象去逐个检查它们是否重叠。
仅仅使用rrules来检测重叠的日期是否可行?有没有其他库已经实现了类似的功能?
1 个回答
5
不,我认为不可能在不创建日期时间对象的情况下分析一个重复规则(rrule),以查看它是否可以与另一个重复规则相交。
简单来说,你是在要求一个算法的结果,但又不想运行这个算法,我觉得这是不可能的。
不过,对于某些类型的重复规则是可以的,比如说“每周四”的规则就不可能和“每周二”的规则相交。比较棘手的是每月的某些天和每年的某些天与每周的某些天相交,以及那些永远不会相交的频率。
最好的办法是先处理那些可以通过分析检查的规则,然后对于其他的规则,生成接下来一年的数据,手动进行比较。
这个算法运行得很快,因为你可以在添加每个规则时缓存已经占用的时间。