我正在阅读 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 日。不是我最初的预期,但希望这可以帮助其他人。