日期与时间

RRULE 生成器 · 先核对日期,再使用规则

用表单建立重复条件,或解析已有规则,核对起点、时区、结束条件和实际日期。

RRULE 生成器

重复条件

BYDAY 可填 MO,WE 或 2TU,-1FR,序号仅用于月、年重复。BYMONTHDAY 为 −31…−1 或 1…31;BYMONTH 为 1…12;BYSETPOS 为 −366…−1 或 1…366,且需搭配其他 BY 条件。多个值用逗号分隔,留空的筛选项不输出。

规则与日期预览

输入仅在当前浏览器中处理,不会发送到服务器。

选项

起点填写带秒的本地 ISO 时间,如 2026-09-14T09:00:00;UNTIL 填带 Z 的 UTC 时间。DTSTART 本身必须符合重复条件。

夏令时缺失时刻按转换前偏移解释,展示顺延后的钟点;重复时刻取第一次。不存在的日历日期直接跳过。

仅支持日、周、月、年重复。输入最多 8,192 个 UTF-16 单元、100 个例外;COUNT 最大 10,000。预览 1–1,000 次,从 DTSTART 起最多十年、最晚到 2099 年,计算五秒超时。

输入或选项已更改,请更新结果后再导出。

每隔两周开会、月底出账、临时取消一次预约,表达的是三种不同的日历关系。RRULE 生成器把这些重复规则展开到具体日期,便于在接入日历前确认:起点是不是第一次发生,短月会不会漏掉一次,时区转换后又落在几点。

作为 RRULE 解析器,它接受裸规则以及带日期属性的片段;作为重复日期生成器,它从 DTSTART 开始预览,而不是从今天开始。例外日期是对确切时刻的排除,不能仅凭日历上的一天猜测。

为什么使用 RRULE 生成器

每月 31 日不等于每月最后一天

RRULE 生成器保留这两种意图的差别。BYMONTHDAY=31 会跳过没有 31 日的月份;BYMONTHDAY=-1 则选择每月最后一天。月底账单应该使用哪个条件,可以直接通过二月的预览结果判断。

两组日历对比固定 31 日与每月末日:固定日期跳过短月,末日规则保留短月最后一天。

排除一次,不会在末尾补一次

COUNT 先限定原始系列,EXDATE 再移除匹配时刻。原本五次的安排排除一次后只剩四次,结束条件不会被延长。结果同时给出已检查部分的排除数量,方便核对例外是否真的命中。

五个发生标记中有一个被划去,剩余四个保持位置,末尾没有新增标记。

先对齐起点,再调整重复条件

01

用匹配的示例开始

每个预设同时带有规则和符合条件的 DTSTART。将周一改为每月第二个周二时,也需要调整起点。生成表单与解析文本各自保留,切换模式不会把其中一份内容写进另一份。

02

分清本地钟点与绝对截止时间

起点及表单内的例外日期填带秒的本地 ISO 时间,按所选 IANA 时区解释。UNTIL 使用带 Z 的 UTC 时刻。若粘贴片段自带 DTSTART,下方备用设置会禁用,实际起点以结果为准。

03

导出前确认预览为何停止

自动计算等待 350 ms;关闭后可点击执行或按 Ctrl/Cmd+Enter。输入变化立即禁用旧结果导出。日期每批显示 50 条,复制报告和 JSON 包含本次全部预览。示例与清空先展示变更,应用后可撤销一次。

从条件看懂每个日期的来由

日历频率与周起始日

INTERVAL 表示每隔几天、几周、几月或几年。BYDAY 可写普通星期,月和年重复还支持带序号的星期。WKST 决定一周从哪天开始,可能改变隔周规则的实际日期。

从候选日期中取最后一项

BYMONTH 指定月份,BYMONTHDAY 的正负数从月初或月末计数。BYSETPOS 在每个频率周期的候选集合中取位置,例如周一至周五搭配 -1 可以选出最后一个平日;它不读取节假日表。

复制片段时带上生效上下文

裸规则使用面板的起点与时区。显式 DTSTART 必须带 UTC 的 Z 或 TZID,规范片段保留实际起点,避免复制后只剩一串缺少时间语境的条件。

同时查看本地与 UTC

每行列出本地时刻、偏移和 UTC;若夏令时导致钟点顺延,还会保留请求的原时刻。通常每周上午的会议在本地仍是同一钟点,但对应的 UTC 会随时区偏移改变。

支持范围与计算边界

片段校验不等于事件校验
只接受 DTSTART、一条 RRULE 和最多 100 个 EXDATE。完整 VEVENT、VCALENDAR、RDATE、EXRULE、厂商扩展、全天 DATE 及显式浮动日期均报错。下载的 .txt 是片段,不是可直接导入的完整 ICS 事件。
只展开四种日历频率
不支持秒、分、小时重复,也不支持 BYHOUR、BYMINUTE、BYSECOND、BYYEARDAY、BYWEEKNO。每天的钟点来自 DTSTART。未知字段会报错,不会悄悄删除后继续给结果。
起点一致,结束条件互斥
DTSTART 本身必须满足规则。COUNT 范围为 1–10,000,不能与 UNTIL 同时出现。UNTIL 必须是 UTC 时刻,不能早于起点,刚好落在截止端点的发生仍包含在系列中。
日历缺日与夏令时缺口不同
不存在的日期跳过且不消耗 COUNT;夏令时缺失钟点按 RFC 5545 已验证勘误 4271 使用转换前偏移,并显示顺延后的时间。重复钟点取第一次。实际偏移依据浏览器可用的时区数据。
例外按时刻排除
EXDATE 可以排除 DTSTART 本身,也可以排除后续发生;不会删除整天,不会自动补足次数。重复的例外会归一化。节假日跳过、顺延和预约改期不属于本工具的规则。
预览有明确上限
输入最多 8,192 个 UTF-16 单元;预览 1–1,000 次,从 DTSTART 起最多十年且不超过 2099 年,起点年份为 1970–2099。计算五秒超时。数量已满、系列结束与搜索范围耗尽会分别提示。

RRULE 生成器常见问题

遇到不存在的 31 日或 2 月 29 日会怎样?

固定日期只在该日真实存在的月份或年份出现,不会自动挪到前一天。每月末日使用 BYMONTHDAY=-1;按年重复的 2 月 29 日会跳过平年。

生成的日期数量有限制吗?

预览最多 1,000 次,规则的 COUNT 最多 10,000,二者用途不同。十年搜索窗及 2099 年上限还可能让稀疏规则少于请求数量;结果会说明停止原因。

日期属于哪个时区?

裸规则使用面板所选 IANA 时区,片段内的 DTSTART 则优先决定时区。结果会列出实际生效的区域、每个本地时刻对应的偏移与 UTC,避免受电脑当前时区影响。

怎样在 RRULE 中排除日期?

EXDATE 是独立属性,不放在 RRULE 参数里。表单每行填写一个完整本地时刻;解析模式可粘贴带 Z 或 TZID 的 EXDATE。规范输出把例外转换为 UTC。

UNTIL 早于 DTSTART 时还会返回日期吗?

本工具会直接报错,要求调整截止时刻或起点。不会把已经在截止日期之后的 DTSTART 强行作为第一次发生。检查时应比较确切 UTC 时刻,而不只是日期字符串。

执行时间不符合预期?

核对下一组重复日期

用 RRULE 生成器一起核对起点、结束条件和例外日期。确认本地时间与 UTC 都符合预期,再复制片段用于日历系统。