Time 您将如何存储可能重复出现的时间?
我需要存储某件事是否发生过一次,每天、工作日、每周、一周中的某些日子、一个月中的某些日子,这些日子可能是数字的,也可能是象征性的,比如每个月的第一个星期一,等等Time 您将如何存储可能重复出现的时间?,time,calendar,recurrence,Time,Calendar,Recurrence,我需要存储某件事是否发生过一次,每天、工作日、每周、一周中的某些日子、一个月中的某些日子,这些日子可能是数字的,也可能是象征性的,比如每个月的第一个星期一,等等 有什么建议吗?要查看任何代码、数据结构或模式吗?尝试一个具有调度功能的开源项目 一些调度接口/定义 及 这听起来像是Outlook中的“重复事件”。我将使用一个名为RecurrenceType的表来存储每个时间段(每日、每周等),另一个名为Event的表将按键引用RecurrenceType。然后,可以使用标准日期函数计算大多数重复类
有什么建议吗?要查看任何代码、数据结构或模式吗?尝试一个具有调度功能的开源项目 一些调度接口/定义 及
这听起来像是Outlook中的“重复事件”。我将使用一个名为RecurrenceType的表来存储每个时间段(每日、每周等),另一个名为Event的表将按键引用RecurrenceType。然后,可以使用标准日期函数计算大多数重复类型的未来日期 有复杂的解决方案和简单的解决方案。两个最简单的解决方案是:
id
recurrence_start
recurrence_end
type (daily|weekly|monthly|yearly)
day_of_week (for weekly)
month
day_of_month
坦率地说,复杂的解决方案可能不值得:)问题是,指定这样的间隔有无限的可能性。例如:“每隔一个月的第一个星期一,如果日期是偶数,但不是4,并且这个月不是一年中的二月”。你愿意走多远?最终,您只需让用户键入一个布尔表达式,该表达式在事件再次发生的日期计算为TRUE。从用户界面的角度来看不是很好
您应该确定系统的一些限制。一旦你知道了这些,剩下的就应该很简单了——或者至少应该对此负责 马丁·福勒写了这篇文章。您可以在一个处理时态表达式的Ruby库中找到许多与他讨论的相同的想法。这里描述的模式捕获了重复出现的日期
上面提到了它,但如果您碰巧使用Ruby,它是一个很好的、主动维护的Runt替代品。您没有提到您的存储后端需求是什么,但是对于数据库模式,@kellan和前面提到的线程上的一些都是很好的开始。Fowler的论文清晰易读,但它没有处理规则的例外情况,IMO是此设计模式的主要问题之一……嘿,kellan,在使用您提供的定期模式时,如何实现事件的范围(开始日期和结束日期)?有什么想法吗?我在设计这样的东西时遇到了很多麻烦。谢谢