使用dateutil.rrulestr,我设法扩展一些重复,例如:看起来像:
DTSTART;TZID=Europe/Zurich:20100930T183000
DTEND;TZID=Europe/Zurich:20100930T193000
RRULE:FREQ=DAILY;UNTIL=20101005T163000Z
BEGIN:VTIMEZONE
...
使用例如:
my_rrule.between(datetime.datetime(2010, 10, 2, 11, 00, tzinfo=pytz.utc),
datetime.datetime(2010, 10, 9, 11, 00, tzinfo=pytz.utc)))
但是,这只给出了事件的开始日期时间,而不是结束日期时间。 有没有办法结束时间? (比自己计算起始端delta并将其应用到每个开始时间更干净。)
此外,一些重复可能适用于全天活动,并采用以下形式:
DTSTART;VALUE=DATE:20120225
DTEND;VALUE=DATE:20120226
RRULE:FREQ=WEEKLY;BYDAY=SA
BEGIN:VTIMEZONE
...
如果我尝试使用相同的()调用来扩展这个,我会收到一个错误:
TypeError: can't compare offset-naive and offset-aware datetimes
是否有一些查询适用于任何类型的重复(理想情况下返回日期或日期时间值,具体取决于具体情况)?
答案 0 :(得分:1)
dateutil.rrule
和朋友们没有持续时间的概念:他们正在及时重复时刻规则。
我的解决方案是将rruleset
替换为自定义类,该类也接受持续时间(或提供默认值)。
然后,我可以生成事件,并确定每次出现的持续时间,以确定间隔。