12

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

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

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

4

3 回答 3

6

使用iCalendar实现库,例如:ruby​​ 、javaphppython.netjava,然后添加对计算特殊日期的支持。

于 2009-06-17T23:02:18.907 回答
0

由于您指定重复的方式的所有这些变化,我会回避一个单一的数据结构实现来适应所有 5 个场景。

相反,我会(并且在以前的项目中)构建简单的结构来解决每种类型的重复。您可以将它们全部包装起来,使其感觉像一个单一的数据结构,但在引擎盖下它们可以做任何他们喜欢的事情。通过实现一个接口,我能够以类似的方式处理每种类型的重复,因此它感觉就像一个万能的数据结构。我可以向任何实例询问特定时间范围内的所有重复日期,这就是诀窍。

在确定具体实施之前,我还想更多地了解如何使用这些日期。

于 2009-06-17T22:57:32.083 回答
0

如果您想亲自创建数据结构,我建议您使用哈希表(其中假期或事件是键,以新日期出现作为值),如果每次出现重复次数,您可以对值进行哈希处理在链表中找到一个部分,然后该部分包含所有出现的列表(这将使查找和插入在 O(1) 中运行)。

于 2009-06-17T23:10:36.100 回答