填写标题、地点、日期和时间、时区、重复、受邀人、提醒和备注,然后下载 .ics 文件或直接在日历中打开。您也可以粘贴日程,或附加文档或照片,一次创建多个活动。

如何让日历事件每周或每月重复一次?

重复只是 .ics 文件中的一行:RRULE:FREQ=WEEKLY,可用 INTERVAL 表示每隔一或两个周期,用 COUNT 或 UNTIL 来结束系列。ICS Maker 的表单可设置频率(每天、每周、每月、每年)、间隔,以及系列是永不结束、在若干次后停止,还是运行到某个日期——并将 RRULE 写入下载的文件,读取该文件的日历会自行展开系列,因此无论运行多久,系列始终只是一个小文件。选择特定的日期不在表单中,需要对文件进行一行编辑:FREQ=MONTHLY;BYMONTHDAY=-1 表示每月最后一天,BYDAY=1MO 表示第一个星期一,BYDAY=MO,TU,WE,TH,FR 表示仅限工作日。本页列出了十二条可直接粘贴的此类规则。

文件中的规则

重复只是一行:RRULE:FREQ=WEEKLY。日历会读取它并自行生成各次发生的事件,这正是重复事件无论运行多久都能保持为一个小文件的原因。该规则还可以带有间隔(INTERVAL=2 表示每两周一次)、结束日期(UNTIL)或次数限制(COUNT)。

生成器会写好这一切。选择频率,设置间隔——每 2 周、每 3 个月一次——并选择系列是永不结束、在若干次后停止,还是运行到某个日期。它生成的这一行是标准格式,因此打开该文件的日历会准确创建所描述的系列。

可直接粘贴的重复规则

表单涵盖频率、间隔以及系列的结束方式。选择特定的日期——每月最后一天、第一个星期一、仅限工作日——需要在下载文件后对其进行一行编辑:用文本编辑器打开它,用以下之一替换 RRULE: 那一行。这些部分均来自 RFC 5545,因此 Google 日历、Outlook、Apple 日历和 Thunderbird 都会以相同方式读取它们。

每周同一天
RRULE:FREQ=WEEKLY
每隔一周(每两周一次)
RRULE:FREQ=WEEKLY;INTERVAL=2
每个工作日,周一至周五
RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR
每月 1 日
RRULE:FREQ=MONTHLY;BYMONTHDAY=1
每月最后一天
RRULE:FREQ=MONTHLY;BYMONTHDAY=-1
每月第一个星期一
RRULE:FREQ=MONTHLY;BYDAY=1MO
每月最后一个星期五
RRULE:FREQ=MONTHLY;BYDAY=-1FR
每月最后一个工作日
RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1
每三个月一次(每季度)
RRULE:FREQ=MONTHLY;INTERVAL=3
每年,在开始日期当天
RRULE:FREQ=YEARLY
重复十二次后停止
RRULE:FREQ=MONTHLY;COUNT=12
每周重复,直到固定日期
RRULE:FREQ=WEEKLY;UNTIL=20261231T235959Z

各部分如何配合

FREQ 是唯一必需的部分;其余的都是对它的限定。INTERVAL 用于跳过若干周期,因此 FREQ=WEEKLY;INTERVAL=2 表示每隔一周而不是每隔一天。BYDAY 采用两个字母的星期代码,前面加上数字则可在某月中选定某次出现——1MO 表示第一个星期一,-1FR 表示最后一个星期五。BYMONTHDAY 则是按日期计数,负数时从月末往回数,这正是让 BYMONTHDAY=-1 成为表示“最后一天”的可靠写法的原因。BYSETPOS 会从该规则其余部分在每个周期内匹配到的日期里进行挑选,因此配合工作日列表和 BYSETPOS=-1 就会落在最后一个工作日上。

该选哪种频率

每周重复以你选定的开始那天是星期几为基准,每月重复则以日期为基准。每月 31 日的事件是典型的陷阱:大多数日历会跳过没有 31 日的月份,而不是顺延,因此如果你指的是每月最后一天,应使用 BYMONTHDAY=-1,而不是把系列的开始日期定在 31 日然后寄希望于顺利。

常见问题

如何停止一个重复事件?
将“重复结束”设置为若干次数或最后日期,文件会相应地带上 COUNT 或 UNTIL。若保持“永不”,系列会一直运行,直到你在自己的日历中将其结束——导入该系列的日历始终可以对其进行编辑。
COUNT 和 UNTIL 有什么区别?
COUNT 在若干次出现后停止系列——COUNT=12 就是十二次,不多不少,具体日期如何都无所谓。UNTIL 则在某个时间点停止,写作 UTC 时间戳,如 UNTIL=20261231T235959Z,任何会落在其后的发生都不会出现。二者从相反的两端完成同一件事,RFC 5545 不允许在一条规则中同时使用两者。
我能让事件每隔一周重复一次吗?
可以——选择“每周”,并将间隔设置为 2。文件的重复规则中会带上 INTERVAL=2,所有日历都会将其读取为每两周一次。同样的方法也适用于每 3 天一次、每 6 个月一次等等。
如何设置为每月最后一天重复?
使用 FREQ=MONTHLY;BYMONTHDAY=-1,这需要对下载的文件进行手动编辑——表单可设置频率、间隔和结束方式,但不能设定选取月份中的哪一天。负数表示从月末往回数,因此会根据每个月的情况落在 28 日、29 日、30 日或 31 日。常见的错误做法是直接把每月系列的开始日期定在 31 日:大多数日历会跳过没有 31 日的月份,而不是顺延事件。
如何跳过系列中的某一次事件?
在 RRULE 旁添加一行 EXDATE,列出要删除的那次事件的开始时间——EXDATE:20261225T090000Z 会删除那一次实例,其余保留。若想将其移动而不是删除,可将该 EXDATE 与另一个具有相同 UID、且带有指向原时段的 RECURRENCE-ID 的 VEVENT 配对使用。
导入 Outlook 或 Google 后,重复规则还能保留吗?
可以。RRULE 是 RFC 5545 的一部分,Outlook 和 Google 都能读取,Apple 日历和 Thunderbird 同样如此。它们会在导入时展开整个系列,而不是存储每一次发生的事件。