android日历事件每年重复重复规则

时间:2013-02-05 07:46:23

标签: android calendar icalendar android-calendar rfc2445

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

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

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

更新

我注意到,如果我按照上面提到的那样创建了一个事件,则会发生以下情况:如果我在2月创建事件并设置为在3月重复,则该规则将获取距离{的月份的天数。事件的{1}}已设置(2月)。因此,如果我在二月创建一个事件并将其设置为在三月的最后一天重复,它将在每年的3月28日或29日闰年重复(而不是预期的31日)。

另一个例子:我在2013年1月创建了DTSTART的事件,并将其设置为每年2月的第一个星期一重复。它创建的事件发生在2013年2月的日期,对应于2013年1月的第一个星期一,在这种情况下是2月7日(因为1月7日是2013年1月的第一个星期一)。每年都会在2月的第一个星期四重复这一活动。

2 个答案:

答案 0 :(得分:1)

添加事件时DTSTART必须与第一次出现事件的月份相同,以避免不必要的副作用

答案 1 :(得分: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 on: 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是出现的一部分。