【问题标题】:Robust and complete expansion or RRULE in pythonpython中健壮且完整的扩展或RRULE
【发布时间】:2013-07-25 06:58:07
【问题描述】:

使用 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)))

但是,这只会给我事件的开始日期时间,而不是结束日期时间。 有没有办法获得结束时间? (比自己计算开始-结束增量并将其应用于每个开始时间更干净)。

此外,一些重复可以针对全天事件并采用以下形式:

DTSTART;VALUE=DATE:20120225
DTEND;VALUE=DATE:20120226
RRULE:FREQ=WEEKLY;BYDAY=SA
BEGIN:VTIMEZONE
...

如果我尝试使用相同的 between() 调用来扩展这个,我会收到一个错误:

TypeError: can't compare offset-naive and offset-aware datetimes

是否有一些查询适用于任何类型的重复(理想情况下返回日期或日期时间值,具体取决于具体情况)?

【问题讨论】:

    标签: python python-dateutil rrule


    【解决方案1】:

    dateutil.rrule 和朋友们没有持续时间的概念:他们正在重复时间瞬间的规则。

    我的解决方案是将rruleset 替换为自定义类,该类也接受持续时间(或提供默认持续时间)。

    然后,我可以生成事件,并根据每个事件的持续时间来确定间隔。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多