Мне не удалось сформулировать RRULE, который позволил бы событие, как показано ниже:
Повторяется ГОДА, с первого воскресенья апреля до последнего дня мая, происходя в понедельник, среду и пятницу, до вечности.
ЧАСТОТА = ГОДОВОЙ; БАЙМОНТ = 4; BYDAY = SU (дает мне первое воскресенье апреля, повторяющееся ежегодно)
и
ЧАСТОТА = ГОДОВОЙ; 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
Это выглядит правильно (я даже начинаю мероприятие 01.01.2009), но когда я начинаю проверять, являются ли определенные дни действительными, я получаю неверные результаты.
Например,
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
Я использую программное обеспечение Dayglas Day's DDay.iCal , но я не думаю, что это ошибка в этой библиотеке. Я думаю, что это может быть ограничением в iCalendar (RFC 2445).
Мысли