3

我正在阅读 RFC 5545 并尝试确定如何正确找到一组事件。假设我有一个 WEEKLY rrule = 2(每隔一周)。我还为 Tue、Wed、Thu 指定了 BYDAY 规则部分。假设我的开始日期是 2011 年 4 月 7 日(星期四),我的结束日期是 2011 年 4 月 27 日(星期三)。显然忽略不重要的日期,我认为我的事件集将包含:2011-04-07、2011-04-12、2011-04-13、2011-04-21、2011-04-26、2011-04- 27.

让我失望的是 RFC 中的以下声明:“WKST 规则部分指定工作周的开始日期。有效值为 MO、TU、WE、TH、FR、SA 和 SU。当每周“RRULE”的间隔大于 1,并且指定了 BYDAY 规则部分。

因此,如果我的 WKST=MO,我从上述语句中看到了一个暗示,即一周不是从开始日期开始,而是从 WKST 开始。这意味着不是使用基于开始日期的一周,在这种情况下,周四至周三,我需要实际从 WKST 开始,并确定哪些事件发生在该周(周一至周日)以及从该 WKST 开始的每隔一周. 因此,出于计算目的,我的开始日期实际上是 2011-04-04。那是在开始日期之前,所以我跳到开始日期,但我坚持周一至周日。这意味着我的事件集实际上是:2011-04-07、2011-04-19、2011-04-20、2011-04-21。这与我原来的设置有很大不同。

此外,如果这是计算的正确方法,这是否也意味着在扩展具有 >1 间隔的其他频率的规则情况时,我必须在该期间的开始而不是开始日期“开始”。MONTHLY 是否包含开始日期当月的第一天 - 最后一天。YEARLY 是否包括开始日期当年的 1 月 1 日 - 12 月 31 日?

我希望那里有一位 iCalendar 大师……我无法理解这里的逻辑。谢谢。

更新:我确实创建了一些 .ics 文件并导入谷歌日历。假设谷歌正确解释了这些,我可以确认使用 INTERVAL>1 的扩展 MONTHLY 将使用该月的第一天到最后一天,而不是从事件的开始日期开始的一个月。YEARLY 规则以相同的方式工作,年份从 1 月 1 日到 12 月 31 日。不是我最初的预期,但希望这可以帮助其他人。

4

1 回答 1

3

我不知道我是否有资格成为一名大师,但我确实已经通过所有 RRULE 的努力。

我的理解是,是的,根据 WKST,绝对每周规则必须从一周开始(然后在此之内,您的 startdate 可能会删除一些日期)。

因此,如果您想要原始日期集,则必须说 WKST=TH !

如果您相信 google 的人已经了解了这一切,那么检查您的理解的一种方法是使用这些规则对一些 ics 文件进行手工编码,然后将它们导入到 google 日历中,然后查看 google 生成的日期。

您可能还会发现此表对重复规则很有帮助 - 在页脚的页面底部还有一些指向 ics 资源的链接。

http://icalevents.com/2447-need-to-know-the-possible-combinations-for-repeating-dates-an-ical-cheatsheet/

于 2011-04-22T07:53:14.920 回答