ICS 日历定义清单
检查本地 iCalendar 组件和事件声明,保留原始日期、时区、重复规则及重复属性。
- 1添加输入
- 2调整设置
- 3获取结果
工具输入和文件在当前浏览器处理,不会上传。
开始之前
导入日历前先审查导出文件实际声明的内容,展开折行,查看事件、参与人、提醒和扩展属性;重复规则与时区规则保持声明形式。
如何使用
- 打开 UTF-8 ICS 导出,或粘贴完整 VCALENDAR 对象。
- 查看组件、原始 DTSTART/DTEND/DURATION/CREATED/RRULE 声明,并在完整 JSON 中检查重复参与人属性。
- 下载 JSON 或组件 CSV,接收端的时区定义及重复实例行为需要另行确认。
支持范围与限制
一个 UTF-8 .ics 文件或粘贴日历,不超过 5 MiB。物理行和属性各最多 100,000 条,组件最多 10,000 个,嵌套深度最多 20。所选文件优先,去除 UTF-8 BOM;接受 LF/CRLF,拒绝仅 CR 换行和空物理内容行。
要求一个 BEGIN/END 配对的 VCALENDAR 根组件及 VERSION:2.0。续行移除首个空格或制表符后拼接。组件错配、孤立续行、未闭合参数引号及不合法参数语法会使整次处理失败。这里是清单,不是完整 RFC 合规校验器。
保留重复属性和参数声明,支持带引号的逗号、冒号、分号值。JSON 保留原始值与来源行号,已知 TEXT 属性解码反斜杠转义;参数的 ^ 编码、未知 VALUE 类型和扩展属性以原始声明保留。
已知日期声明检查日期时间拼写,并标注 DATE、UTC、浮动或带 TZID 类型。不解析时区、不生成重复实例、不排程、不执行提醒或计算持续时间,也不展开 RRULE/EXDATE/RDATE。预览显示 200 个组件,JSON 保留全部属性,CSV 保留组件摘要。
操作示例
示例输入
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Neatbo Fixture//EN BEGIN:VEVENT UID:event-1 DTSTART;TZID=Europe/Paris:20261001T090000 DTEND;TZID=Europe/Paris:20261001T100000 SUMMARY:Planning\, team\nSecond line RRULE:FREQ=WEEKLY;COUNT=2 ATTENDEE;CN="Ada, Example";ROLE=REQ-PARTICIPANT:mailto:[email protected] ATTENDEE;CN="张三":mailto:[email protected] BEGIN:VALARM TRIGGER:-PT15M ACTION:DISPLAY DESCRIPTION:Reminder END:VALARM END:VEVENT END:VCALENDAR
示例参数
{"params": {}}示例输出
{
"scope": "component definitions only; no recurrence expansion, timezone resolution or alarm execution",
"components": [
{
"index": 1,
"name": "VCALENDAR",
"path": "/VCALENDAR[1]",
"parent": null,
"line": 1,
"properties": [
{
"line": 2,
"name": "VERSION",
"parameters": [],
"rawValue": "2.0",
"decodedText": null,
"valueKind": "raw",
"timeZone": null
},
{
"line": 3,
"name": "PRODID",
"parameters": [],
"rawValue": "-//Neatbo Fixture//EN",
"decodedText": "-//Neatbo Fixture//EN",
"valueKind": "text",
"timeZone": null
}
]
},
{
"index": 2,
"name": "VEVENT",
"path": "/VCALENDAR[1]/VEVENT[2]",
"parent": 1,
"line": 4,
"properties": [
{
"line": 5,
"name": "UID",
"parameters": [],
"rawValue": "event-1",
"decodedText": "event-1",
"valueKind": "text",
"timeZone": null
},
{
"line": 6,
"name": "DTSTART",
"parameters": [
{
"name": "TZID",
"values": [
"Europe/Paris"
],
"raw": "TZID=Europe/Paris"
}
],
"rawValue": "20261001T090000",
"decodedText": null,
"valueKind": "zoned-date-time-declaration",
"timeZone": "Europe/Paris"
},
{
"line": 7,
"name": "DTEND",
"parameters": [
{
"name": "TZID",
"values": [
"Europe/Paris"
],
"raw": "TZID=Europe/Paris"
}
],
"rawValue": "20261001T100000",
"decodedText": null,
"valueKind": "zoned-date-time-declaration",
"timeZone": "Europe/Paris"
},
{
"line": 8,
"name": "SUMMARY",
"parameters": [],
"rawValue": "Planning\\, team\\nSecondline",
"decodedText": "Planning, team\nSecondline",
"valueKind": "text",
"timeZone": null
},
{
"line": 10,
"name": "RRULE",
"parameters": [],
"rawValue": "FREQ=WEEKLY;COUNT=2",
"decodedText": null,
"valueKind": "raw",
"timeZone": null
},
{
"line": 11,
"name": "ATTENDEE",
"parameters": [
{
"name": "CN",
"values": [
"Ada, Example"
],
"raw": "CN=\"Ada, Example\""
},
{
"name": "ROLE",
"values": [
"REQ-PARTICIPANT"
],
"raw": "ROLE=REQ-PARTICIPANT"
}
],
"rawValue": "mailto:[email protected]",
"decodedText": null,
"valueKind": "raw",
"timeZone": null
},
{
"line": 12,
"name": "ATTENDEE",
"parameters": [
{
"name": "CN",
"values": [
"张三"
],
"raw": "CN=\"张三\""
}
],
"rawValue": "mailto:[email protected]",
"decodedText": null,
"valueKind": "raw",
"timeZone": null
}
]
},
{
"index": 3,
"name": "VALARM",
"path": "/VCALENDAR[1]/VEVENT[2]/VALARM[3]",
"parent": 2,
"line": 13,
"properties": [
{
"line": 14,
"name": "TRIGGER",
"parameters": [],
"rawValue": "-PT15M",
"decodedText": null,
"valueKind": "raw",
"timeZone": null
},
{
"line": 15,
"name": "ACTION",
"parameters": [],
"rawValue": "DISPLAY",
"decodedText": null,
"valueKind": "raw",
"timeZone": null
},
{
"line": 16,
"name": "DESCRIPTION",
"parameters": [],
"rawValue": "Reminder",
"decodedText": "Reminder",
"valueKind": "text",
"timeZone": null
}
]
}
]
}出现问题时
配对 BEGIN/END 组件名,补齐参数引号,修复孤立折行和已知日期格式。减少嵌套、组件或属性数量;切换粘贴输入前先移除所选文件。
常见问题
重复事件实例会计入事件数吗?
不会。事件数只统计声明的 VEVENT 组件,RRULE 保留原文,不生成实例。
会将带 TZID 的时间转换成 UTC 吗?
不会。原始 TZID 和本地时间戳作为声明一起保留。
未知组件和重复参与人会被丢掉吗?
不会。组件和属性数组完整保留,包括重复项及扩展声明。