我正在阅读RFC 5545并尝试确定如何正确查找一组事件。假设我有一个WEEKLY rrule = 2(每隔一周)。我还为Tue,Wed,Thu指定了一个BYDAY规则部分。我们假设我的开始日期是2011-04-07(周四),我的结束日期是2011-04-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开始,并确定哪些事件发生在THAT WKST周(周一至周日)和每隔一周。因此,出于计算目的,我的开始日期实际上是2011-04-04。那是在开始日期之前,所以我跳到开始日期,但我坚持周一至周日。这意味着我的发生集实际上是:2011-04-07,2011-04-19,2011-04-20,2011-04-21。这与我原来的设置大不相同。
此外,如果这是正确的计算方法,这是否也意味着在以> 1个间隔扩展其他频率的rrule情况时,我必须在该周期的开始而不是开始日期“开始”。每月是否包含开始日期的第1天 - 最后一天。是否每年都包含开始日期的1月1日至12月31日?
我希望那里有一位iCalendar大师......我无法围绕这里的逻辑。感谢。
更新: 我确实创建了一些.ics文件并导入谷歌日历。假设谷歌正确地解释了这些,我可以确认,使用INTERVAL> 1扩展MONTHLY将使用该月的第1天到最后一天,而不是从事件的开始日期开始的一个月。年度规则以相同的方式运作,年份从1月1日至12月31日。不是我最初的预期,但希望这可以帮助其他人。
答案 0 :(得分:3)
我不知道自己是否有资格成为一名古茹,但我确实在所有RRULE中奋力拼搏。
我的理解是肯定的,根据WKST,每周规则必须从一周的开始开始(然后你的开始日期可能会削减一些日期)。
所以,如果你想要你的原始日期,那么你必须说WKST = TH!
如果您相信谷歌已经有人已经完全了解,那么检查您的理解的一种方法是使用这些规则手动编码某些ics文件并将其导入谷歌日历并查看谷歌生成的日期。
您可能还会发现此表对重复规则很有帮助 - 页脚底部的页面也是一些指向ics资源的链接。