You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用icalendar库处理ics文件时如何自动生成重复事件实例

icalendar库自动展开重复日历事件方案

实现思路

不需要手动解析RRULE规则,直接借助python-dateutil库的rrule模块完成规则解析和重复时间生成,兼容谷歌日历导出的所有ics重复规则。

操作步骤

  • 第一步:安装依赖
    执行命令:pip install python-dateutil

  • 第二步:核心逻辑实现
    遍历VEVENT条目时,区分普通事件和重复事件分别处理,额外兼容重复事件的例外取消场景:

    1. 提取单个事件的基础信息:事件标题、开始时间、结束时间、单次事件时长
    2. 收集事件的例外取消日期(对应ics中的EXDATE字段),后续生成重复事件时跳过这些日期
    3. 无RRULE字段的普通事件直接生成实例
    4. 有RRULE字段的重复事件,先将RRULE对象转为标准字符串,传入rrule工具生成所有重复事件的开始时间,逐一生成独立实例

示例代码

from icalendar import Calendar
from dateutil.rrule import rrulestr

# 加载ics文件
with open("谷歌日历导出文件.ics", "rb") as f:
    cal = Calendar.from_ical(f.read())

custom_entries = []
for event in cal.walk("VEVENT"):
    # 提取基础属性
    dt_start = event.get("dtstart").dt
    dt_end = event.get("dtend").dt
    duration = dt_end - dt_start
    event_title = event.get("summary")
    
    # 收集例外取消的日期
    exclude_dates = []
    if "EXDATE" in event:
        exdate_list = event.get("EXDATE")
        exdate_list = exdate_list if isinstance(exdate_list, list) else [exdate_list]
        for exdate_item in exdate_list:
            exclude_dates.extend([dt.dt for dt in exdate_item.dts])
    
    # 处理普通非重复事件
    if "RRULE" not in event:
        # 这里替换成你自己的自定义Entry类实例化逻辑即可
        custom_entries.append({
            "title": event_title,
            "start_time": dt_start,
            "end_time": dt_end
        })
        continue
    
    # 解析RRULE生成所有重复时间点
    rrule_content = event.get("RRULE").to_ical().decode("utf-8")
    repeat_rule = rrulestr(rrule_content, dtstart=dt_start)
    for repeat_start in repeat_rule:
        # 跳过已取消的例外场次
        if repeat_start in exclude_dates:
            continue
        # 生成单场重复事件的实例
        custom_entries.append({
            "title": event_title,
            "start_time": repeat_start,
            "end_time": repeat_start + duration
        })

注意事项

  • 如果ics中的时间带时区信息,生成的重复事件会自动继承原事件的时区属性,不会出现时间偏移
  • 支持所有iCalendar标准的RRULE规则,包含按周/月/年重复、间隔设置、指定工作日、结束条件等所有谷歌日历支持的重复场景

内容的提问来源于stack exchange,提问作者Lukas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:27:03