Введение в шаблоны повторений

Вы можете воспринимать шаблон повторения как способ описать конкретный график. Он содержит достаточно информации, чтобы построить список вхождений (даты и времена) согласно заданному расписанию. Шаблон повторения может включать правила повторения, описывающие циклы, которые комбинируются в общий шаблон. Как правило, чем сложнее шаблон повторения, тем больше правил он содержит. Шаблоны повторения могут включать исключения (не путать с исключениями, представляющими ошибки во время выполнения приложения). Исключения добавляют или удаляют даты вхождений из оригинального шаблона. Исключения могут быть указаны как явные вхождения или как отдельный шаблон. Примеры шаблонов повторения с исключениями:

  • Каждая вторая пятница, кроме периода с июня по август.
  • 1‑е число каждого месяца, кроме января, когда должно быть 2‑е.

Шаблоны повторения чаще всего периодичны, но не обязаны быть таковыми. Шаблон повторения может быть полностью описан как набор заранее определённых дат и времени. Спецификация iCalendar RFC определяет компоненты, такие как VEVENT или VTODO, представляющие события или задачи. Компоненты могут иметь свойства, такие как дата и время начала, описание, место, участники и повторение. Поэтому шаблон повторения обычно существует как свойство повторяющейся задачи или события. Свойства шаблонов повторения, определённые iCalendar, являются:

  • DTSTART — дата и время начала шаблона (также представляет первое событие, если оно явно не исключено).
  • RRULE — задаёт правило повторения для набора повторений.
  • RDATE — определяет список дат и времени, включаемых в набор повторений.
  • EXRULE — задаёт правило повторения для исключений из набора повторений.
  • EXDATE — определяет список дат и времени, исключённых из набора повторений.

Только свойство DTSTART обязательно, и оно должно присутствовать единожды. Все остальные свойства необязательны и могут указываться более одного раза. Aspose.iCalendar принимает строку в формате iCalendar и считывает шаблон повторения в RecurrencePattern объект. Строка может быть полным описанием компонента iCalendar (например, полного VEVENT) или лишь фрагментом, содержащим только шаблон повторения. После загрузки шаблона в объект RecurrencePattern вы можете:

  • Изучить и изменить шаблон программно через методы и свойства, предоставляемые Aspose.iCalendar
  • Сгенерировать даты/время повторений в указанном диапазоне дат.
  • Сохранить шаблон в формате iCalendar.

Следующий фрагмент кода показывает, что часть RRULE содержит правило повторения.

Посмотрите на пример шаблонов повторения для иллюстраций того, как создавать шаблоны повторения.

О модели объектов Aspose.iCalendar

Пространство имён Aspose.iCalendar содержит все классы, предоставляемые компонентом Aspose.iCalendar. RecurrencePattern и RecurrenceRule являются центральными классами Aspose.iCalendar и предоставляют конкретные реализации соответствующих элементов RFC 2445.

Класс RecurrencePattern представляет весь шаблон повторения. Вы можете создать новый шаблон повторения с нуля, используя конструктор по умолчанию, или загрузить существующий шаблон в формате iCalendar с помощью статического метода FromiCalendar. Класс RecurrenceRule представляет часть RRULE или EXRULE шаблона повторения. RecurrenceRule раскрывает ряд свойств, которые напрямую соответствуют их аналогам в стандарте iCalendar. Например, ByMonth соответствует BYMONTH в iCalendar и т.д. Анализируя или задавая значения свойств RecurrenceRule, вы можете проанализировать или изменить правило повторения. Для получения дополнительной информации и примеров кода см. RecurrencePattern и RecurrenceRule в справочнике API.

Образцы шаблонов

Этот раздел включает следующие темы:

  • Последний день месяца.
  • Последний рабочий день каждого месяца.
  • Последний понедельник года.
  • Пятница первой недели ISO 8601 года.
  • Первая пятница года.

Последний день месяца

Эти примеры шаблон повторения указывает последний день месяца, каждый месяц.

RRULE:FREQ=MONTHLY;BYMONTHDAY=-1

Аналогично, если вам нужно вхождение за день до последнего дня месяца, используйте BYMONTHDAY=-2. Если указать BYMONTHDAY=31, то согласно стандарту iCalendar, в месяцах, где меньше 31 дня, вхождение не будет сгенерировано.

Последний рабочий день каждого месяца

Эти примеры шаблон повторения указывает последний рабочий день месяца, каждый месяц. Рабочие дни определяются как дни, в которые вы работаете. В Европе, например, рабочими днями обычно считаются понедельник‑пятница.

RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1

Указанное правило выбирает все рабочие дни месяца и выбирает последний из них. В результате получается последний рабочий день месяца.

Последний понедельник года

Этот пример шаблон повторения указывает событие, которое происходит в последний понедельник года.

RRULE:FREQ=YEARLY;BYDAY=-1MO

Пятница первой недели ISO 8601 года

Этот пример шаблон повторения указывает пятницу первой недели года. В спецификации ISO 8601 первая неделя года — это первая неделя, в которой минимум четыре дня. Когда год начинается в субботу, например, неделя 1 — это сразу следующая неделя, начинающаяся в понедельник, 3 января.

FREQ=YEARLY;BYWEEKNO=1;BYDAY=FR

Первая пятница года

Этот пример шаблон повторения указывает событие, которое происходит в первую пятницу года.

FREQ=YEARLY;BYDAY=1FR

В 1999 г., например, первая пятница года — 1999/01/01, тогда как пятница первой недели ISO 8601 — 1999/01/08.