重复“事件”(日历)

时间:2009-07-12 12:17:36

标签: events date calendar

我目前正在开发一个应用程序,允许人们为在线广播电台安排“演出”。

我希望用户能够设置重复的事件,例如: -

“狂躁星期一”节目 - 每周一9-11 “月中疯狂” - 每月的第二个星期四 “这几个月的新音乐” - 每个月的第一天。

在您看来,这是建模的最佳方式(基于MVC / MTV结构)。

注意:我实际上是在Django编码。但我对它背后的理论更感兴趣,而不是具体的实现细节。

3 个答案:

答案 0 :(得分:9)

啊,重复的事件 - 我生命中的一个祸根,还有时区。 Calendaring hard

可能想要根据RFC2445对此进行建模。但是,这可能会给你带来更大的灵活性和复杂性。

需要考虑的一些事项:

  • 在给定日期,您是否需要比特定时间更精细的粒度?如果你需要根据时间重复,它会变得更加棘手。
  • 考虑日期角落案例,例如“每月30日”及其对闰年的意义
  • 考虑时间角落情况,例如“每天凌晨1点30分” - 有时凌晨1点30分可能会发生两次,有时可能根本不会发生,因为夏令时
  • 您是否需要与其他时区的人分享时间表?这让生活变得更加棘手
  • 您是否需要表示事件发生的次数或事件发生的最终日期? (基本上是“计数”或“直到”。)您可能不需要,或者您可能需要一个或两个。

我意识到这是一个需要考虑的事情清单而不是一个明确的答案,但我认为在您尝试制定解决方案之前定义问题的参数非常重要。

答案 1 :(得分:1)

通过阅读其他帖子,Martin Fowler描述了反复出现的事件。 http://martinfowler.com/apsupp/recurring.pdf

有人为Java实现了这些类。 http://www.google.com/codesearch#vHK4YG0XgAs/src/java/org/chronicj/DateRange.java

答案 2 :(得分:0)

我曾经想过,在保存原始事件时,应该使用新模型生成重复事件。这意味着我不会在每次加载日历时进行随机处理(例如,我也可以取消一个系列中的“Show”),但也意味着我必须将其限制在某个时间范围内,所以如果有人说,未来一年,他们就不会看到这些重复的节目。但在某些时候,他们必须(可能)重新生成。