由RRULE和DTSTART从定期活动中获取日期

时间:2013-11-28 14:05:50

标签: python icalendar caldav

我需要计算重复事件的下一个可能日期。从vcalender我得到了这个信息:

DTSTART;TZID=Europe/Berlin:20130711T130000
RRULE:FREQ=WEEKLY;BYDAY=TH

使用http://pythonhosted.org/caldav/按日期获取事件。

start_date = datetime.today()
end_date = start_date + timedelta(days=7)

calendar.date_search(start_date, end_date)

但是今天有一个事件在这个信息中,是否可以用这些信息计算/打印正确的日期?

y.getChildValue('rrule')
    u'FREQ=WEEKLY;BYDAY=TH'

y.getChildValue('dtstart')
    datetime.datetime(2013, 7, 11, 13, 0, tzinfo=<tzicalvtz 'Europe/Berlin'>)

1 个答案:

答案 0 :(得分:2)

如果您愿意使用其他模块,请尝试python-dateutil,例如

import dateutil.rrule as rrule
rule = rrule.rrulestr(y.getChildValue('rrule'), dtstart=y.getChildValue('dtstart'))
rule.after(y.getChildValue('dtstart'))

应该返回:

datetime.datetime(2013, 7, 18, 13, 0)