1

我正在尝试以编程方式在日历中添加事件。我希望该活动每年重复一次,例如二月的每个第一个星期一。我使用的规则是这样的:

FREQ=YEARLY;BYDAY=1MO;BYMONTH=2;INTERVAL=1;COUNT=11;

问题是:如果我创建事件的开始日期在一月,并将其设置为每年一月重复,那么它工作正常。但是,如果我在除 2 月以外的其他月份创建开始日期的事件,并将其设置为按照相同的规则重复,则该事件不会在星期一重复,而是在其他日期重复。那一天会有所不同,具体取决于事件的开始日期是哪个月份。似乎它计算天数,因为在闰年,这一天会改变一。

更新:

我注意到,如果我创建如上所述的事件,则会发生以下情况:如果我在 2 月创建事件并设置为在 3 月重复,则规则从DTSTART事件发生的蛾子获取月份中的天数设置(二月)。因此,如果我在 2 月创建一个事件并将其设置为在 3 月的最后一天重复,它将在 3 月 28 日或闰年的 29 日重复(而不是预期的 31 日)。

另一个例子:我DTSTART在 2013 年 1 月创建事件并将其设置为在 2 月的每个第一个星期一重复。它在 2013 年 2 月的日期创建事件,该日期对应于 2013 年 1 月的第一个星期一,在本例中为 2 月 7 日(因为 1 月 7 日是 2013 年 1 月的第一个星期一)。每年二月的第一个星期四将重复该活动。

4

2 回答 2

1

添加事件时DTSTART必须与事件的第一次发生在同一个月,以避免不必要的副作用

于 2013-02-11T14:09:52.740 回答
0

您能否就您所拥有的和您的期望提供更多详细信息:

BEGIN:VCALENDAR
PRODID:byhand
VERSION:2.0
BEGIN:VEVENT
DTSTAMP:20130205T090000Z
UID:SO_14702482_2b
SUMMARY:SO_14702482_2b
DTSTART:20130104T090000Z
RRULE:FREQ=YEARLY;BYDAY=1MO;BYMONTH=2;INTERVAL=1;COUNT=11;
END:VEVENT
END:VCALENDAR

将发生(在 2 个不同的平台上测试)@09h00Z 在:20130104,20130204,20140203,20150202,20160201,20170206,...

尽管

BEGIN:VCALENDAR
PRODID:byhand
VERSION:2.0
BEGIN:VEVENT
DTSTAMP:20130205T090000Z
UID:SO_14702482_1b
SUMMARY:SO_14702482_1b
DTSTART:20130204T090000Z
RRULE:FREQ=YEARLY;BYDAY=1MO;BYMONTH=2;INTERVAL=1;COUNT=11;
END:VEVENT
END:VCALENDAR

将发生(这里也测试过)@09h00Z 在:20130204、20140203、20150202、20160201、20170206、...

主要区别在于 RFC5545 指定,DTSTART 是发生的一部分。

于 2013-02-05T10:01:40.387 回答