Date 什么';定期或重复日期的数据结构好吗?

Date 什么';定期或重复日期的数据结构好吗?,date,data-structures,recurring,Date,Data Structures,Recurring,是否有用于存储定期或重复日期的已发布数据结构?可以处理的事情: 这台泵需要每五天回收一次 发薪日是每隔一个星期五 感恩节是十月的第二个星期一(美国:十一月的第四个星期四) 情人节是每年的2月14日 冬至(通常)是每年的6月21日和12月21日 复活节是春分当天或之后的第一个满月后的星期天(好吧,这一天有点长) 我认为cron的内部数据结构可以处理#1、#4、#5(两条规则)以及可能的#2,但我还没有看过它。MS Outlook和其他日历似乎能够处理前五种情况,但我没有这方面的源代码。由于您指定重

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

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

  • 我认为
    cron
    的内部数据结构可以处理#1、#4、#5(两条规则)以及可能的#2,但我还没有看过它。MS Outlook和其他日历似乎能够处理前五种情况,但我没有这方面的源代码。

    由于您指定重复周期的方式存在所有这些变化,我会避免使用一个数据结构实现来适应所有五种情况

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


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

    使用一个实现库,如:、和,然后添加对计算特殊日期的支持。

    如果您想亲自创建数据结构,我建议使用哈希表(如果假日或事件是以新日期事件作为值的键),如果每个事件都有多个值,则可以对在链接列表中找到某个节的值进行散列,该列表将包含所有事件的列表(这将使查找和插入在O(1)中运行).

    这可能会有帮助:谢谢。如果我刚才搜索的是“定期”而不是“定期日期”我会发现一大堆问题。是的,我认为您需要一组联合的数据结构,因为表示重复发生的方式非常不同。然后您需要一个界面,您可以查询某一天或某几天是否与任何重复发生相匹配。在回答您的问题时,日期将用于预订电话/视频/网络会议,其中一些与国定假日同时举行,因此出现了“10月第二个星期一”的业务。谢谢。我认为iCalendar似乎有些过分,但也许这毕竟是最简单的解决方案。