关于 ics-generator
ics-generator 可将自然语言事件描述转换为符合 iCalendar RFC 5545 的 `.ics` 日历文件,适合需要创建单次或重复日程的人使用,并提供时区、提醒和格式处理规则。
主要功能
- 01解析自然语言事件信息
- 02生成 RFC 5545 日历文件
- 03处理重复事件与排除日期
- 04添加提醒和事件属性
- 05应用时区及格式规则
适用场景
- 01根据会议描述创建日历文件
- 02安排带排除日期的重复日程
- 03制作全天或多日活动条目
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ johnlarkin1/ claude-code-extensions --skill ics-generator安装后在 Claude Code 中输入/ics-generator确认已加载。
附带文件references/ics-format.md
详细介绍
ICS 日历文件生成器
根据自然语言事件描述生成有效的 .ics(iCalendar RFC 5545)文件。生成的文件可直接在 Apple Calendar 中打开。
快速开始
最简有效的单事件文件:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART;TZID=America/New_York:20250115T140000
DTEND;TZID=America/New_York:20250115T150000
SUMMARY:Team Meeting
UID:[email protected]
DTSTAMP:20250115T120000Z
END:VEVENT
END:VCALENDAR
工作流
- 解析用户的自然语言描述,提取:标题、日期/时间、时长、地点、重复规则、参与者、提醒
- 解析日期指代,例如相对于当前日期的“下周二”“本周五下午 3 点”
- 默认时区设为
America/New_York,除非用户另有指定 - 为 UID 字段生成 UUID v4:
<uuid4>@claude.ai - 将 DTSTAMP 设为当前 UTC 时间戳
- 构建 VEVENT 块,包含所有适用属性
- 为提醒添加 VALARM(若未指定,默认提前 15 分钟)
- 为重复事件添加 RRULE
- 使用标准头信息封装为 VCALENDAR
- 将
.ics文件写入当前工作目录,并使用open <filename>.ics打开文件
默认值
- 时区:
America/New_York(美国东部时间)——除非事件显然位于其他时区,否则不要询问用户时区 - 自动打开:写入文件后始终运行
open <filename>.ics - 保存位置:当前工作目录
- 时长:若未指定,则为 1 小时
- 提醒:若未指定,则提前 15 分钟
- 文件名:根据事件摘要使用 kebab-case,例如
team-meeting.ics
VCALENDAR 封装
每个 .ics 文件都以以下内容开头和结尾:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
<VTIMEZONE blocks>
<VEVENT blocks>
END:VCALENDAR
日期/时间格式
定时事件(含时区)
DTSTART;TZID=America/New_York:20250115T140000
DTEND;TZID=America/New_York:20250115T150000
全天事件(仅 DATE,不含时间部分)
DTSTART;VALUE=DATE:20250115
DTEND;VALUE=DATE:20250116
注意:全天事件的 DTEND 为排他性日期——1 月 15 日的单日全天事件使用 1 月 16 日作为 DTEND。
UTC 时间
DTSTART:20250115T190000Z
事件属性
必需
| 属性 | 描述 | 示例 |
|---|---|---|
DTSTART | 开始日期/时间 | DTSTART;TZID=America/New_York:20250115T140000 |
DTEND 或 DURATION | 结束时间或时长 | DTEND;TZID=America/New_York:20250115T150000 或 DURATION:PT1H |
SUMMARY | 事件标题 | SUMMARY:Team Standup |
UID | 唯一标识符 | UID:[email protected] |
DTSTAMP | 创建时间戳(UTC) | DTSTAMP:20250115T120000Z |
可选
| 属性 | 描述 | 示例 |
|---|---|---|
DESCRIPTION | 事件详情/备注 | DESCRIPTION:Discuss Q1 roadmap |
LOCATION | 事件地点 | LOCATION:Conference Room A |
URL | 相关链接 | URL:https://meet.google.com/abc-defg-hij |
ORGANIZER | 事件组织者 | ORGANIZER;CN=John:mailto:[email protected] |
ATTENDEE | 受邀者 | ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Jane:mailto:[email protected] |
STATUS | 事件状态 | STATUS:CONFIRMED(或 TENTATIVE、CANCELLED) |
TRANSP | 时间透明度 | TRANSP:OPAQUE(忙碌)或 TRANSP:TRANSPARENT(空闲) |
CATEGORIES | 事件类别 | CATEGORIES:MEETING,WORK |
PRIORITY | 优先级(0-9) | PRIORITY:1(1=最高,9=最低,0=未定义) |
DURATION 格式
DURATION:PT1H → 1 hour
DURATION:PT30M → 30 minutes
DURATION:PT1H30M → 1 hour 30 minutes
DURATION:P1D → 1 day
DURATION:P1W → 1 week
文本转义
对文本属性值中的以下字符进行转义:
- 反斜杠:
\\ - 分号:
\; - 逗号:
\, - 换行符:
\n
示例:
DESCRIPTION:Agenda:\n1. Review\n2. Planning\nLocation: Room 4\, Building A
提醒(VALARM)
在 VEVENT 块内添加:
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
常见触发时长
| 自然语言 | TRIGGER 值 |
|---|---|
| 事件开始时 | TRIGGER:PT0S |
| 提前 5 分钟 | TRIGGER:-PT5M |
| 提前 10 分钟 | TRIGGER:-PT10M |
| 提前 15 分钟 | TRIGGER:-PT15M |
| 提前 30 分钟 | TRIGGER:-PT30M |
| 提前 1 小时 | TRIGGER:-PT1H |
| 提前 2 小时 | TRIGGER:-PT2H |
| 提前 1 天 | TRIGGER:-P1D |
| 提前 1 周 | TRIGGER:-P1W |
重复事件(RRULE)
在 VEVENT 中添加 RRULE 属性:
RRULE:FREQ=WEEKLY;BYDAY=TU,TH;COUNT=10
常见模式
| 模式 | RRULE |
|---|---|
| 每天 | RRULE:FREQ=DAILY |
| 每个工作日 | RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR |
| 每周 | RRULE:FREQ=WEEKLY |
| 每 2 周 | RRULE:FREQ=WEEKLY;INTERVAL=2 |
| 每月(同一日期) | RRULE:FREQ=MONTHLY |
| 每月(例如,每月第 2 个星期二) | RRULE:FREQ=MONTHLY;BYDAY=2TU |
| 每年 | RRULE:FREQ=YEARLY |
| 每周,直到某个日期 | RRULE:FREQ=WEEKLY;UNTIL=20250630T235959Z |
| 每周,重复 10 次 | RRULE:FREQ=WEEKLY;COUNT=10 |
排除日期(EXDATE)
EXDATE;TZID=America/New_York:20250219T140000
EXDATE;TZID=America/New_York:20250226T140000
时区处理
默认值:America/New_York
使用东部时间时,请始终包含此 VTIMEZONE 区块:
BEGIN:VTIMEZONE
TZID:America/New_York
BEGIN:STANDARD
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE
常见时区名称映射
| 用户说 | TZID |
|---|---|
| Eastern、ET、EST、EDT | America/New_York |
| Central、CT、CST、CDT | America/Chicago |
| Mountain、MT、MST、MDT | America/Denver |
| Pacific、PT、PST、PDT | America/Los_Angeles |
| Arizona | America/Phoenix |
| Hawaii、HST | Pacific/Honolulu |
| London、GMT、BST | Europe/London |
| Paris、CET、CEST | Europe/Paris |
| Tokyo、JST | Asia/Tokyo |
有关所有常见时区的完整 VTIMEZONE 定义,请参阅 references/ics-format.md。
行折叠
超过 75 个八位字节的行 MUST 通过插入 CRLF 后跟一个空白字符(空格或制表符)进行折叠。实际使用时,请尽可能将属性行控制在 75 个字符以内。
DESCRIPTION:This is a very long description that would exceed the seventy-f
ive octet limit so it is folded onto the next line with a leading space.
关键注意事项
- 换行符:整个文件使用 CRLF(
\r\n)换行符 - DTEND 为排他性:1 月 15 日的全天事件需要使用
DTEND;VALUE=DATE:20250116 - UID 必须全局唯一:为每个事件生成全新的 UUID v4
- DTSTAMP 为必需项:始终设为当前 UTC 时间
- VTIMEZONE 必须位于 VEVENT 之前:在文件中将时区定义放在事件之前
- 末尾不得有空白字符:行末不能有空格或制表符
- 属性名称不区分大小写,但惯例上使用大写
- 空行:组件内的属性之间不得有空行
- RRULE 中的 UNTIL 必须为 UTC:
UNTIL=20250630T235959Z(带 Z 后缀) - 多值属性:使用逗号分隔:
EXDATE;TZID=America/New_York:20250219T140000,20250226T140000
完整示例
简单会议
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:America/New_York
BEGIN:STANDARD
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=America/New_York:20250115T140000
DTEND;TZID=America/New_York:20250115T150000
SUMMARY:Team Standup
DESCRIPTION:Weekly sync to review progress and blockers
LOCATION:Conference Room B
UID:[email protected]
DTSTAMP:20250115T120000Z
STATUS:CONFIRMED
TRANSP:OPAQUE
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
全天事件
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART;VALUE=DATE:20250220
DTEND;VALUE=DATE:20250221
SUMMARY:Company Holiday
UID:[email protected]
DTSTAMP:20250115T120000Z
TRANSP:TRANSPARENT
END:VEVENT
END:VCALENDAR
多日事件
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART;VALUE=DATE:20250310
DTEND;VALUE=DATE:20250313
SUMMARY:Team Offsite
DESCRIPTION:Annual team offsite in Austin
LOCATION:Austin\, TX
UID:[email protected]
DTSTAMP:20250115T120000Z
END:VEVENT
END:VCALENDAR
带例外日期的每周重复会议
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:America/New_York
BEGIN:STANDARD
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=America/New_York:20250107T100000
DTEND;TZID=America/New_York:20250107T103000
SUMMARY:1:1 with Manager
RRULE:FREQ=WEEKLY;BYDAY=TU;UNTIL=20250701T035959Z
EXDATE;TZID=America/New_York:20250218T100000
EXDATE;TZID=America/New_York:20250527T100000
UID:[email protected]
DTSTAMP:20250115T120000Z
STATUS:CONFIRMED
BEGIN:VALARM
TRIGGER:-PT10M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
单个文件中的多个事件
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Claude//ICS Generator//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:America/New_York
BEGIN:STANDARD
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=America/New_York:20250120T090000
DTEND;TZID=America/New_York:20250120T091500
SUMMARY:Morning Standup
UID:[email protected]
DTSTAMP:20250115T120000Z
BEGIN:VALARM
TRIGGER:-PT5M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=America/New_York:20250120T140000
DTEND;TZID=America/New_York:20250120T150000
SUMMARY:Design Review
LOCATION:Zoom
UID:[email protected]
DTSTAMP:20250115T120000Z
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
参考
有关完整的属性表、完整的 RRULE 语法、所有时区定义和验证清单,请参阅 references/ics-format.md。
评论
支持 Markdown