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