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

使用Python如何读取下载的.ics文件提取当日所有日程事件

Python 读取ics文件提取当日日程实现方案

1. 安装依赖库

我们使用ics库解析ics格式文件,Python 3.9+可使用自带的zoneinfo处理时区,低于3.9版本可安装pytz替代。
安装命令:

pip install ics python-dateutil
# 如果Python版本<3.9,额外执行 pip install pytz

2. 完整实现代码

以下代码默认适配中国大陆时区(Asia/Shanghai),可根据自身需求修改时区参数:

from ics import Calendar
from datetime import datetime
from zoneinfo import ZoneInfo  # Python<3.9 替换为 import pytz

# 配置时区
TARGET_TZ = ZoneInfo("Asia/Shanghai")  # Python<3.9 替换为 pytz.timezone("Asia/Shanghai")

def get_today_events(ics_file_path):
    # 读取ics文件
    with open(ics_file_path, 'r', encoding='utf-8') as f:
        cal = Calendar(f.read())
    
    # 获取当日日期(转换为目标时区的日期)
    today = datetime.now(tz=TARGET_TZ).date()
    today_events = []

    for event in cal.events:
        # 处理事件开始时间,区分全天事件和非全天事件
        if hasattr(event.dtstart, 'tzinfo'):
            # 带时区的时间,转换为目标时区
            event_start = event.dtstart.astimezone(TARGET_TZ)
        else:
            # 全天事件,dtstart是date对象,直接使用
            event_start = event.dtstart
        
        # 匹配当日日期
        if event_start.date() == today:
            today_events.append({
                "title": event.name,
                "start_time": event_start,
                "end_time": event.dtend.astimezone(TARGET_TZ) if hasattr(event.dtend, 'tzinfo') else event.dtend,
                "description": event.description if hasattr(event, 'description') else "",
                "location": event.location if hasattr(event, 'location') else ""
            })
    return today_events

# 调用示例
if __name__ == "__main__":
    events = get_today_events("./your_schedule.ics")
    print(f"今日共有{len(events)}个日程:")
    for idx, e in enumerate(events, 1):
        print(f"\n{idx}. {e['title']}")
        print(f"时间:{e['start_time']} 至 {e['end_time']}")
        if e['location']:
            print(f"地点:{e['location']}")

3. 注意事项

  • ics文件编码如果不是utf-8,可修改open方法的encoding参数,比如encoding='gbk'
  • 全天事件的时间默认是0点,输出时可自行判断做格式优化
  • 如果需要筛选其他日期,只需修改today变量为对应datetime.date对象即可
  • 部分从Outlook导出的ics文件可能存在格式兼容问题,可尝试将文件头的X-WR-CALNAME等非标准字段删除后再解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:15:03