我未能成功制定允许事件的 RRULE,如下所示:
每年重复一次,从四月的第一个星期日到五月的最后一天,在星期一、星期三和星期五发生,直到永远。
FREQ=YEARLY;BYMONTH=4;BYDAY=SU (给我每年四月的第一个星期日重复)
和
FREQ=YEARLY;BYMONTH=5;BYMONTHDAY=-1(给我每年五月的最后一天)
但我不知道如何让活动在周一、周三和周五的这些日期之间每年重复一次。
建议?
更新:评论没有足够的空间来回应克里斯的回答,所以我正在编辑这个问题并提供更多信息。
抱歉不行。我不知道它是我正在使用的 DDay.iCal 库还是什么,但这也不起作用。我发现日期开始不能是序数日期(第一个星期日等)..它必须是一个特定的日期,这使得我的要求变得困难。即使使用多个 RRULE,它似乎也不起作用:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//DDay.iCal//NONSGML ddaysoftware.com//EN
BEGIN:VEVENT
CREATED:20090717T033307Z
DTSTAMP:20090717T033307Z
DTSTART:20090101T000000
RRULE:FREQ=YEARLY;WKST=SU;BYDAY=MO,WE,FR;BYMONTH=4,5
RRULE:FREQ=YEARLY;WKST=SU;BYDAY=1SU;BYMONTH=4
RRULE:FREQ=YEARLY;WKST=SU;BYMONTH=5;BYMONTHDAY=-1
SEQUENCE:0
UID:352ed9d4-04d0-4f06-a094-fab7165e5c74
END:VEVENT
END:VCALENDAR
表面上看起来是对的(我什至在 2009 年 1 月 1 日开始活动),但是当我开始测试某些日子是否有效时,我得到了不正确的结果。
例如,
4/1/2009 12:00:00 AM = True // Should be False
4/6/2009 12:00:00 AM = True
4/7/2009 12:00:00 AM = False
4/8/2009 12:00:00 AM = True
5/1/2009 12:00:00 AM = True
5/2/2009 12:00:00 AM = False
5/29/2009 12:00:00 AM = True
5/31/2009 12:00:00 AM = True // Should be False
6/1/2009 12:00:00 AM = False
我正在使用Douglas Day 的 DDay.iCal软件,但我认为这不是该库中的错误。我认为这可能是 iCalendar (RFC 2445) 中的一个限制。
想法?