2009-06-17 65 views
10

是否有公布的数据结构用于存储定期或重复日期?可以处理的东西:什么是定期或重复日期的好数据结构?

  1. 泵需要每五天回收一次。
  2. 发薪日是每个星期五。
  3. 感恩节是十月的第二个星期一(美国:十一月的第四个星期四)。
  4. 情人节是每2月14日。
  5. 冬至(通常)每6月21日和12月21日。
  6. 复活节是在春分日或之后的第一个满月之后的星期日(好吧,这是一个有点延伸)。

我认为cron的内部数据结构可以处理#1,#4,#5(两条规则),也许#2,但我没有看过它。 MS Outlook和其他日历似乎能够处理前五个,但我没有那个源代码。

+0

这可能有所帮助:http://stackoverflow.com/questions/85699/whats-the-best-way-to-model-recurring-events-in-a-calendar-application – molf 2009-06-17 22:42:54

+0

谢谢。如果我刚刚搜索“经常性”而不是“经常性日期”,我会发现一大堆问题。 – yukondude 2009-06-17 22:47:37

回答

0

通过指定重现的方式的所有这些变化,我会避开单个数据结构实现来适应所有5种情况。

相反,我会(并为以前的项目)建立简单的结构,解决每种类型的重复。你可以将它们全部包装起来,以使它感觉像是一个单一的数据结构,但是它们可以做任何他们喜欢的事情。通过实现一个接口,我能够以类似的方式处理每种类型的重复,因此感觉就像是一个适合所有人的数据结构。我可以在任何时间范围内询问任何情况下的复发日期,并且这样做。

我也想知道更多关于这些日期需要如何使用之前解决具体实施。

+0

是的,我认为你需要一套联合的数据结构,因为表达重现的方式是如此不同。然后,您需要一个可以查询的界面,以查找某天或某几天是否与任何重复发生匹配。在回答你的问题时,这些日期将被用于预订电话/视频/网络会议,其中一些与国家假期相符,因此是“十月份的第二个星期一”业务。 – yukondude 2009-06-17 23:36:34

0

如果你想动手创建一个数据结构,我推荐一个散列表(其中假期或事件是新的日期出现值的键),如果有每个事件的多重性,你可以对在链表中找到一个节的值进行散列处理,然后得到所有出现的列表(这将使查找以及插入在O(1)中运行)。