Определение вхождений из расширяемой iCalendar RRule - PullRequest
3 голосов
/ 22 апреля 2011

Я читаю 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 и определить, какие события попадают в эту неделю (пн-вс) и каждую вторую неделю из THAT WKST.,Таким образом, для целей расчета моя начальная дата будет на самом деле 2011-04-04.Это происходит до даты начала, поэтому я прыгаю вперед до даты начала, но придерживаюсь недели Пн-Вс.Это означает, что мой набор вхождений на самом деле: 2011-04-07, 2011-04-19, 2011-04-20, 2011-04-21.Это сильно отличается от моего первоначального набора.

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

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

ОБНОВЛЕНИЕ: Я создал несколько файлов .ics и импортировал их в календарь Google.Предполагая, что Google правильно их интерпретирует, я могу подтвердить, что расширение ЕЖЕМЕСЯЧНО с ИНТЕРВАЛОМ> 1 будет использовать 1-й до последнего дня месяца, а НЕ месяц, начиная с даты начала события.Правила YEARLY работают таким же образом, год начинается с 1 января по 31 декабря.Не то, что я изначально ожидал, но, надеюсь, это поможет кому-то еще.

1 Ответ

3 голосов
/ 22 апреля 2011

Я не знаю, квалифицируюсь ли я как гуру, но я определенно пробился через все 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/

...