gpt4 book ai didi

python - iCal 库可迭代特定实例的重复事件

转载 作者:行者123 更新时间:2023-12-01 23:45:50 25 4
gpt4 key购买 nike

我正在寻找一个能够迭代重复发生的 iCal 事件并自动处理特定实例的库(最好是 Python,但语言并不重要)。

我正在使用的 iCal 文件包含重复事件(例如: RRULE:FREQ=WEEKLY;UNTIL=20150614;BYDAY=MO,TU,WE,TH,FR )。这些重复发生的事件有时具有特定实例:单个事件的摘要可能会更改,或者一个事件会被删除。结果是 VEVENT iCal 文件中的 s 具有类似 RECURRENCE-ID 的属性和EXDATE .

我看过的大多数 iCal 库(python-icalendar、ical.js、php iCalCreator)都会帮助您进行解析,但只会返回单独的(且未分组的)VEVENT s 适用于所有特定实例。这意味着您必须将它们与相关的 RRULE 相匹配。您自己并确定这如何影响 RRULE .

因此,我们假设一个重复发生的事件发生在周一至周五 9:00-10:00。但周五(10:00-11:00)有一个特定实例,周三有一个已删除实例。在这种情况下,我想以如下方式迭代事件:

[
{start: '2015-06-15 09:00:00', end: '2015-06-15 10:00:00'},
{start: '2015-06-16 09:00:00', end: '2015-06-16 10:00:00'},
{start: '2015-06-18 09:00:00', end: '2015-06-18 10:00:00'},
{start: '2015-06-19 10:00:00', end: '2015-06-19 11:00:00'},
]

最佳答案

Python 库 recurring-ical-events根据 RFC5455 重复展开事件。

pip install recurring-ical-events

示例:

import icalendar
import datetime
import recurring_ical_events
import urllib.request

start_date = (2019, 3, 5)
end_date = (2019, 4, 1)
url = "https://raw.githubusercontent.com/niccokunzmann/python-recurring-ical-events/master/test/calendars/recurring-events-changed-duration.ics"

ical_string = urllib.request.urlopen(url).read()
calendar = icalendar.Calendar.from_ical(ical_string)
events = recurring_ical_events.of(calendar).between(start_date, end_date)
for event in events:
start = event["DTSTART"].dt
duration = event["DTEND"].dt - event["DTSTART"].dt
print("start {} duration {}".format(start, duration))

输出:

start 2019-03-18 04:00:00+01:00 duration 1:00:00
start 2019-03-20 04:00:00+01:00 duration 1:00:00
start 2019-03-19 04:00:00+01:00 duration 1:00:00
start 2019-03-07 02:00:00+01:00 duration 1:00:00
start 2019-03-08 01:00:00+01:00 duration 2:00:00
start 2019-03-09 03:00:00+01:00 duration 0:30:00
start 2019-03-10 duration 1 day, 0:00:00
<小时/>

旧答案:

来自answer of Sven ,

dateutil.rrule声称处理 ICalendar RFC 5545 中的规则。如果您查看示例,它会提供 datetime 对象。

关于python - iCal 库可迭代特定实例的重复事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30913824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com