Я использую google-rfc-2445 генерировать повторяющиеся события в соответствии в соответствии с rfc-2445:Как я могу исключить DTSTART из сгенерированных событий, если его день не среди дней, указанных BYDAY?
Свойство «DTSTART» за «VEVENT» определяет инклюзивное начало мероприятия. Для повторяющихся событий он также указывает самый первый пример в наборе повторений.
Так, например, RRULE для события, которое встречается, каждые пятницу 5 раз:
DTSTART;TZID=US-Eastern:20160204T090000
RRULE:FREQ=WEEKLY;COUNT=5;BYDAY=FR;INTERVAL=1;
Так, по rfc-2445 он будет генерировать 6 событий. Первое событие на Thursday 4 February 2016
, второе событие на Friday 5 February 2016
и т. Д.
Как я могу достичь этого, он исключит первое событие, если оно не в шаблоне? В приведенном выше примере он должен исключить первое появление, 4 February 2016
. В случае определения DTSTART;TZID=US-Eastern:20160205T090000
, который является пятницей, он должен покинуть первое место.
Это может быть сделано путем определения такого «правила исключения» в RRULE
себя, или мне нужно сделать проверку в коде, и если DTSTART
не в тот же день, как это определено в BYDAY
я должен искать ближайшую дату в коде (вручную) и сменить команду DTSTART
?
ОБНОВЛЕНИЕ Хорошо, в соответствии с RFC-2445 и этот вопрос о группе Google: https://groups.google.com/forum/#!topic/google-rfc-2445/xqYFe411ysA
Свойство "EXDATE" может быть использован, чтобы исключить значение, указанное в
"DTSTART". Однако в таких случаях исходная дата «DTSTART» ДОЛЖНА
по-прежнему поддерживается системой календарного планирования и планирования, поскольку
исходное значение «DTSTART» имеет собственные зависимости использования от других свойств , таких как «RECURRENCE-ID».
похоже, что мне нужно использовать свойство EXDATE
для достижения того, что мне нужно. Пытаясь достичь этого следующим RRULE:
EXDATE;TZID=Asia/Jerusalem:20160210T000000
RRULE:FREQ=WEEKLY;COUNT=5;BYDAY=WE;INTERVAL=1;
И дата начала: в следующем коде 2016-02-10T00:00:00.000+02:00
:
DateTimeIterable dti = DateTimeIteratorFactory.createDateTimeIterable(RRULE, DTSTART, dateTimeZone, true);
Но это возвращает только 4 события, так что всегда удалить первое событие.
Это сгенерирует 5 событий из-за 'COUNT = 5'. DTSTART считается первым экземпляром, поэтому будет только 4 пятничных события. – Marten
Нет, он возвращает 6 событий, событие, которое задано DTSTART и 5 событий по шаблону. – Anatoly
Это ошибка в библиотеке. [RFC 5545] (https://tools.ietf.org/html/rfc5545#section-3.3.10) ясно говорит: 'Параметр правила COUNT определяет количество вхождений, в которых для привязки к диапазону рекурсии. Значение свойства «DTSTART» всегда считается первым вхождением. « – Marten