Python将Excel转iCal时如何设置iCalendar的DTSTART属性为指定时区?
你使用的是ics.py库生成iCal文件,按以下步骤修改即可实现带时区的DTSTART输出:
前置说明
Python3.9及以上版本可以直接用自带的zoneinfo模块处理时区,更低版本可以安装pytz库替代。
修改后的代码
from ics import Calendar, Event, TimeZone # Python3.9+ 用自带的zoneinfo from zoneinfo import ZoneInfo tz_berlin = ZoneInfo("Europe/Berlin") # 低版本Python用pytz的话替换上面2行代码为: # import pytz # tz_berlin = pytz.timezone("Europe/Berlin") out_cal = Calendar() # 给日历添加柏林时区定义,生成的ics会自动包含标准VTIMEZONE块 out_cal.timezones.add(TimeZone(tz_berlin)) for i, row in df_entries.iterrows(): ev = Event() ev.name = row['name'] ev.description = row['description'] # 给Excel读取到的无时区原生时间绑定柏林时区 ev.begin = row['begin'].replace(tzinfo=tz_berlin) ev.end = row['end'].replace(tzinfo=tz_berlin) ev.location = row['location'] out_cal.events.add(ev)
输出效果
修改后生成的ics文件中,时间字段会自动变成你需要的格式,不会再生成UTC后缀Z:
DTSTART;TZID=Europe/Berlin:20220203T114500 DTEND;TZID=Europe/Berlin:20220203T134500
注意事项
- 如果你的Excel读取出来的
row['begin']已经是带时区的datetime对象,不需要重复添加tzinfo,只要保证时区属性是Europe/Berlin即可 - 不要手动修改输出字符串格式,通过时区对象配置生成的ics符合通用标准,不会出现日历软件兼容问题
内容的提问来源于stack exchange,提问作者user17208336
相关产品推荐
相关产品推荐

