代码之家  ›  专栏  ›  技术社区  ›  yukondude

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

  •  10
  • yukondude  · 技术社区  · 15 年前

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

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

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

    3 回复  |  直到 13 年前
        1
  •  6
  •   mgcm    15 年前

    使用 iCalendar 实现库,如下所示: ruby , java php , python , .net java ,然后添加对计算特殊日期的支持。

        2
  •  0
  •   Larsenal    15 年前

    由于您指定重复周期的方式存在所有这些变化,我将避免使用单一的数据结构实现来适应所有5种场景。

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

    我还想知道,在确定具体的实现之前,需要如何使用这些日期。

        3
  •  0
  •   mduvall    15 年前

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