Определение вхождений из расширяемого правила iCalendar RRule

Я читаю RFC 5545 и пытаюсь определить, как правильно найти набор вхождений. Скажем, у меня ЕЖЕНЕДЕЛЬНОЕ правило = 2 (раз в две недели). Я также указал часть правила BYDAY для Вт, Ср, Чт. Предположим, моя дата начала - 2011-04-07 (чт), а моя дата окончания - 2011-04-27 (среда). Очевидно, игнорируя менее значимые, чем дата, я бы подумал, что мой набор вхождений будет содержать: 2011-04-07, 2011-04-12, 2011-04-13, 2011-04-21, 2011-04-26, 2011-04- 27.

Что меня сбивает с толку, так это заявление из RFC: «Часть правила WKST определяет день начала рабочей недели. Допустимые значения: MO, TU, WE, TH, FR, SA и SU. Это важно, когда ЕЖЕНЕДЕЛЬНО "RRULE" имеет интервал больше 1, и указана часть правила BYDAY. "

Итак, если мой WKST = MO, я вижу следствие из приведенного выше утверждения, что неделя начинается не с даты начала, а с WKST. Это означает, что вместо того, чтобы использовать неделю, основанную на дате начала, в данном случае, четверг-среда, мне нужно фактически начать с WKST и определить, какие события попадают в ЭТУ неделю (пн-вс) и каждую вторую неделю с ЭТОГО WKST . Итак, для целей расчета моей датой начала будет 2011-04-04. Это происходит до даты начала, поэтому я перехожу к дате начала, но придерживаюсь недели с понедельника по воскресенье. Это означает, что мой набор вхождений на самом деле: 2011-04-07, 2011-04-19, 2011-04-20, 2011-04-21. Это сильно отличается от моего оригинального набора.

Вдобавок, ЕСЛИ это правильный способ расчета, означает ли это, что при расширении ситуаций правил для других частот с интервалами> 1 я должен "начинать" в начале этого периода, а не в дату начала. ЕЖЕМЕСЯЧНО охватывает 1 - последний день месяца с даты начала. ГОД включает 1 января - 31 декабря года даты начала?

Я надеюсь, что там есть гуру iCalendar ... Я не могу понять здесь логику. Спасибо.

ОБНОВЛЕНИЕ: я создал несколько файлов .ics и импортировал их в календарь Google. Предполагая, что Google интерпретирует их правильно, я могу подтвердить, что при расширении MONTHLY с INTERVAL> 1 будет использоваться с 1-го по последний день месяца, а НЕ месяц, начиная с даты начала события. ГОДОВЫЕ правила действуют таким же образом, год длится с 1 января по 31 декабря. Не то, что я ожидал изначально, но, надеюсь, это поможет кому-то другому.


person heath    schedule 21.04.2011    source источник


Ответы (1)


Я не знаю, могу ли я квалифицироваться как гуру, но я определенно боролся за свой путь через все RRULE.

Насколько я понимаю, да, в целом правило недели ДОЛЖНО начинаться с начала недели в соответствии с WKST (а затем в этом случае ваша начальная дата может отрубить некоторые даты).

Итак, если вам нужен исходный набор дат, вам нужно будет сказать WKST = TH!

Если вы уверены, что в Google есть люди, которые уже все это поняли, то один из способов проверить ваше понимание - вручную закодировать некоторые файлы ics с этими правилами и импортировать их в календарь Google и посмотреть, какие даты генерирует Google.

Вы также можете найти эту таблицу полезной для повторяющихся правил - также внизу страницы в нижнем колонтитуле есть ссылки на ресурсы ics.

http://icalevents.com/2447-need-to-know-the-possible-combinations-for-repeating-dates-an-ical-cheatsheet/

person anmari    schedule 22.04.2011
comment
Хороший звонок в календаре гугла. Итак, в том же духе, как бы мне обработать МЕСЯЧНЫЙ ИНТЕРВАЛ = 2, когда моя дата начала, скажем, 2011-04-15, а BYDAY = FR? Будет ли мой набор включать пятницу с 1-го по последнее число каждого второго месяца или с 15-го по 14-е число следующего месяца каждые два месяца? Учитывая то, как обрабатывается еженедельная обработка, кажется, что ЕЖЕМЕСЯЧНЫЕ правила начинаются 1-го числа месяца, а ЕЖЕГОДНЫЕ правила - 1 января. - person heath; 22.04.2011