Представляем паттерны повторения

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

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

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

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

Требуется только DTSTART и должен быть только один DTSTART. Все остальные свойства являются необязательными и могут быть указаны несколько раз. 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 первая неделя года — это первая неделя года, то есть неделя продолжительностью не менее четырех дней. Например, если год начинается в субботу, первая неделя — это следующая неделя, начинающаяся в понедельник, 3 января.

FREQ=YEARLY;BYWEEKNO=1;BYDAY=FR

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

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

FREQ=YEARLY;BYDAY=1FR

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