8

问题来自 MS Outlook 日历行为。

想象一下,我有两个重复发生的事件(从今天开始):“每个第二个星期一”和“每个奇数日期”。有什么方法可以检查交叉点和/或通过算法找到第一个交叉日期,而不需要对每个日期进行暴力破解?

可以用 CRON 的符号或 ICal 符号进行定义。我觉得没关系。

公历中是否有任何解决方案?

UPD:了解 MS Outlook 日历如何处理这些事件也很有趣。我的意思是它是如何发现那个前任的。今天有两个活动?我想也应该是确定具体日期是否适合重复事件定义的技术。

形式上它可以描述为两个函数算法:

Date:intersection(Event e1, Event e2)
boolean:contains(Date date, Event ev)

关于限制,我们可以从事件定义符号开始。您可以在 Outlook(或 iCal)中看到,您可以定义不那么复杂的重复事件。

4

2 回答 2

1

如果您只关心不同重复事件在同一天发生的时间,您可以:

  • 将最近过去的任意一天确定为第 1 天。
  • 将每次重复表示为事件和开始日之间的“天数”;如果您的事件每周一和每周四发生,则将其表示为 2 次重复,开始日期为 2 天。
  • 使用适当的模运算来找出不同重复发生的事件发生冲突的日子。

例如,如果“每个星期一”和“第 5 天”重复发生都在第 1 天发生冲突,那么它们接下来将在第 36、71、106 天等发生冲突

如果你想要更精确的东西,你需要测量的不是一整天,而是你感兴趣的一天中的任何一小部分。

于 2010-05-25T12:03:49.450 回答
1

由于第 1 次重复周期为 14 天,因此当月以奇数结束时,当天的奇偶校验(奇数或偶数)才会改变:1 月、2 月、3 月、5 月、7 月、8 月、10 月、12 月。一个月不会变。

于 2010-05-25T11:48:29.383 回答