介绍重复模式

您可以将 recurrence pattern(重复模式)视为描述特定时间表的一种方式。它包含足够的信息,以根据给定的时间表生成出现列表(日期和时间)。重复模式可能包含描述循环的 recurrence rules(重复规则),这些循环组合形成整体模式。通常,重复模式越复杂,包含的重复规则就越多。重复模式可以包括 exceptions(例外),但不要与代表应用程序执行期间错误的异常混淆。例外会向原始模式添加或移除出现日期。例外可以被指定为显式的出现,或作为一个模式本身。以下是带有例外的重复模式示例:

  • 每第二个星期五,除六月至八月之外。
  • 每个月的第一天,除了一月应为第二天。

重复模式通常是周期性的,但并非必须如此。重复模式可以完全描述为一组预定义的出现日期和时间。iCalendar RFC 定义了 components(组件),例如 VEVENT 或 VTODO,代表事件或任务。组件可以具有诸如开始日期时间、描述、位置、与会者和重复等属性。因此,重复模式通常作为重复任务或事件的属性存在。iCalendar 定义的重复模式属性有:

  • DTSTART - 模式的开始日期和时间(如果未明确排除,也表示第一次出现)。
  • RRULE - 为重复集合指定重复规则。
  • RDATE - 定义要包含在重复集合中的日期和时间列表。
  • EXRULE - 为重复集合中的例外指定重复规则。
  • EXDATE - 定义重复集合中的日期和时间例外列表。

仅需要 DTSTART,而且只能有一个 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 类表示整个重复模式。您可以使用默认构造函数从头创建新的重复模式,或使用静态方法 FromiCalendar 加载 iCalendar 格式的已有模式。RecurrenceRule 类表示重复模式中的 RRULE 或 EXRULE 部分。RecurrenceRule 暴露了多个属性,这些属性直接映射到 iCalendar 标准中的对应项。例如,ByMonth 对应 iCalendar 中的 BYMONTH,依此类推。通过检查或设置 RecurrenceRule 属性的值,您可以分析或修改重复规则。有关更多信息和代码示例,请参阅 API 参考中的 RecurrencePattern 和 RecurrenceRule。

示例模式

本节包括以下主题:

  • 当月的最后一天。
  • 每月的最后一个工作日。
  • 当年的最后一个星期一。
  • 当年第一 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。