python生成微软日历可以使用的ics文件

日历标准格式

ics文件

.ics这一扩展名指的是iCalendar(“日历数据交换标准”)文件格式和文件类型,是一种用于保存和交换日历信息的标准格式。iCalendar格式不依赖于任何网络协议,因此通过现有的各种服务(如HTTP、电子邮件、WebDAV等)就可以对日历数据进行交换和更新。

.ics文件通常是纯文本文件,可通过文本编辑程序打开和浏览。文件中包含日程表事件的数据,这些数据通过一个具有语义结构的基于XML的代码表示。.ics文件允许记录、交换、导入和更新可用的日期和时间,且允许在不改变待办事项清单的前提下预定和取消预约及计划。

iCalendar的RFC文档

BEGIN:VCALENDAR									# 日历开始
PRODID:-//139 Mail//calendar 2.3//EN			# 软件信息
VERSION:2.0										# 遵循的iCalendar版本号
CALSCALE:GREGORIAN								# 历法:公历
BEGIN:VEVENT									# 事件开始
DTSTAMP:20230411T031706Z						# 有 Method 属性时表示实例创建时间,没有时表示最后修订的日期时间
DTSTART:20230410T000000							# 开始的时间
DTEND:20230411T000000							# 结束的时间
SUMMARY:每周提醒,测试								# 简介、标题
LOCATION:地点										# 地点
DESCRIPTION:备注L提前15分钟						# 事件的描述
X-ALLDAY:1										# 是否是全天事件
UID:10-414111111-1591111111@139.com			# 唯一标识
ORGANIZER:mailto:1591111111@139.com			# 组织者
ATTENDEE;CN=11111@outlook.com;RSVP=TRUE:mailto:11111@outlook.com
ATTENDEE;CN=1111111@qq.com;RSVP=TRUE:mailto:1111111@qq.com
RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR
X-REQMY:EMAIL
BEGIN:VALARM									# alarm组件开始
TRIGGER:-PT15M									# 提前15分钟提醒
REPEAT:1										
DURATION:PT1M
SUMMARY:每周提醒,测试
ACTION:DISPLAY									# 在ACTION:DISPLAY时,预期的效果是向用户显示“DESCRIPTION”属性的文本值。
DESCRIPTION:每周提醒,测试
END:VALARM										# alarm结束
END:VEVENT										# 事件结束

END:VCALENDAR									# 日历结束

创建ics文件

导包

from icalendar import Calendar, Event, Alarm
from datetime import datetime
from pytz import UTC # timezone
import calendar
import time
import random
cal = Calendar()
cal.add('version', '2.0')
cal.add('prodid', '-//SWM's Calendar//SWM//CN')

event = Event()
# 当前时间
now_time = datetime(
    time.localtime()[0],
    time.localtime()[1],
    time.localtime()[2],
    time.localtime()[3],
    time.localtime()[4],
    time.localtime()[5],
    tzinfo=UTC)
# 时间戳
event.add('dtstamp', now_time)
# 开始时间
event.add('dtstart', datetime(2022,4,4,tzinfo=UTC))
# 结束时间
event.add('dtend', datetime(2022,4,5,tzinfo=UTC))
event.add('X-ALLDAY', 1)
# 事件名
event.add('summary', '事件名')
event.add('description','详情描述')
tmp_t = time.strftime("%Y%m%d%H%M", time.localtime())
print(tmp_t)
event['uid'] = tmp_t+'@SWM'

freq_of_recurrence = 'DAILY'
event.add('rrule', { 'FREQ': freq_of_recurrence, 'INTERVAL': 2})


alarm = Alarm()
alarm.add("action", "DISPLAY")
alarm.add('description', "Reminder")
#alarm.add("trigger", datetime.timedelta(hours=-reminderHours))
# The only way to convince Outlook to do it correctly
reminderM = 10 # 提前10分钟提醒
alarm.add("TRIGGER;RELATED=START", "-PT{0}M".format(reminderM))

event.add_component(alarm)
cal.add_component(event)
 
f = open('example.ics', 'wb')
f.write(cal.to_ical())
f.close()

参考

  1. 日历标准格式
  2. Python icalendar.Event方法代码示例
  3. Python icalendar.Calendar类代码示例
  4. 使用Python解析文件(ICS / iCalendar)
  5. 使用python发送outlook约会提醒邮件
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值