2012-02-23 53 views
1

使用dateutil.rrulestr,我設法擴大一些復發,例如,一個看起來像:強大和完整的膨脹或RRULE在Python

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 
... 

如果我嘗試展開這個有()調用之間的相同,我得到一個錯誤:

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

是否有一些查詢可以適用於任何類型的重複(理想情況下根據具體情況返回日期或日期時間值)?

回答

1

dateutil.rrule和朋友們沒有持續時間的概念:他們正在重複時間規則。

我的解決方案是用自定義類替換rruleset,該自定義類也接受持續時間(或提供默認時間)。

然後,我可以生成事件,並在每個事件發生時持續確定時間間隔。