对于定期或重复日期,什么是良好的数据结构?

时间:2009-06-17 22:41:24

标签: date data-structures recurring

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

  1. 泵需要每五天回收一次。
  2. 发薪日是每隔一个星期五。
  3. 感恩节是10月的第二个星期一(美国:11月的第四个星期四)。
  4. 情人节是每年的2月14日。
  5. Solstice(通常)每年6月21日和12月21日。
  6. 复活节是在春分之日或之后的第一个满月之后的星期日(好吧,这个有点延伸)。
  7. 我认为cron的内部数据结构可以处理#1,#4,#5(两个规则),也许#2,但我还没有看过它。 MS Outlook和其他日历似乎能够处理前五个,但我没有源代码。

3 个答案:

答案 0 :(得分:6)

使用iCalendar实施库,例如:rubyjavaphppython.net和{{3然后添加对计算特殊日期的支持。

答案 1 :(得分:0)

由于您指定重复发生的方式存在所有这些变化,我会回避单一数据结构实现以适应所有5种情况。

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

在确定具体实施方案之前,我还想了解更多关于如何使用这些日期的信息。

答案 2 :(得分:0)

如果你想动手创建数据结构,我建议使用一个哈希表(假日或事件是新日期出现的键作为值),如果每次出现都有多重性,你可以哈希查找链接列表中某个部分的值,该部分随后包含所有匹配项的列表(这将使查找和插入运行在O(1)中)。