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

重复“事件”(日历)

  •  6
  • Mez  · 技术社区  · 17 年前

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

    “躁狂星期一”秀-每周一9-11 “月中疯狂”-每月的第二个星期四 “本月新音乐”-每月1日。

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

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

    3 回复  |  直到 12 年前
        1
  •  9
  •   Jon Skeet    17 年前

    啊,重复的事件——我生命中的一个祸害,还有时区。日历是 硬的 .

    可能 想用以下方式建模 RFC2445 然而,这可能会给你带来比你真正想要的更多的灵活性和复杂性。

    • 你需要比给定日期的某个时间更精细的粒度吗?如果你也需要根据时间重复,那就更棘手了。
    • 考虑时间拐角情况,如“每天凌晨1:30”-有时凌晨1:30可能会发生两次,有时由于夏令时,可能根本不会发生
    • 你需要与其他时区的人共享时间表吗?这让生活变得更加棘手
    • 您需要表示事件发生的次数,还是事件发生的最后日期?(基本上是“计数”或“直到”。)你可能不需要其中之一,或者你可能需要一个或两个。

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

        2
  •  1
  •   johndpope    14 年前

    通过阅读其他帖子,Martin Fowler对重复发生的事件进行了最好的描述。 http://martinfowler.com/apsupp/recurring.pdf

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

        3
  •  0
  •   Mez    17 年前

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