从iCal数据生成时间表。
timetable的Python项目详细描述
iCal是一种相对紧凑的文本格式,虽然不直观,也不方便使用。 用于日历和日程安排信息。可以定义重复事件 通过大量的规则,使得格式紧凑但不方便 用于自动处理。这个包的目的是提供功能 通过转换iCalendar简化iCalendar文件的自动处理 把信息编成时间表。
文档和代码
您可以在中找到a short guide、some examples,以及API reference 是online documentation。源代码在Bitbucket上可用。
如果您发现任何错误,请将它们张贴在issue tracker。
开始
时间表是包含开始和结束日期时间的元组的排序序列。 例如(start, end, entry)项。start和 end是datetime偏移原始对象(例如,不包含时区 信息)在UTC时间。entry是一个字典,包含任意 价值观。
以下示例是有效的时间表列表:
[(datetime(2015,1,1,12),datetime(2015,1,1,13),{}),(datetime(2015,1,2,12),datetime(2015,1,2,13),{}),(datetime(2015,1,3,12),datetime(2015,1,3,13),{}),]
可以从iCal文件生成时间表。下面的示例显示 时间表是根据日历中的所有事件条目生成的。例子 打印每个条目的开始datetime以及日历事件 摘要:
>>>fromtimetableimportparse_ical,generate_timetable>>>>>>icaldata=b""" ... BEGIN:VCALENDAR ... BEGIN:VEVENT ... UID:0 ... DTSTART:20150101T120000Z ... DTEND:20150101T130000Z ... RRULE:FREQ=DAILY;COUNT=3;BYDAY=TH,FR ... SUMMARY:event a ... END:VEVENT ... BEGIN:VEVENT ... UID:1 ... DTSTART:20150101T123000Z ... DTEND:20150101T133000Z ... RRULE:FREQ=DAILY;COUNT=3 ... SUMMARY:event b ... END:VEVENT ... END:VCALENDAR ... """>>>calendar=parse_ical(icaldata)[0]>>>forstart,end,entryingenerate_timetable(calendar,b'vevent'):...summary=str(entry['item'][b'summary'][0].value.decode('utf-8'))...print('%s%s'%(start.isoformat(),summary))2015-01-01T12:00:00eventa2015-01-01T12:30:00eventb2015-01-02T12:00:00eventa2015-01-02T12:30:00eventb2015-01-03T12:30:00eventb2015-01-08T12:00:00eventa
垃圾还是鸡蛋?
时间表数据可用于计算时间管理的指标,如 例如,计算在会议或项目上花费的时间。
然而,更紧迫的问题是如果你花更多的时间吃饭 两个月后午餐吃鸡蛋或土豆条,假设你吃土豆条45分钟,但是 每周一和周二只吃一周,而你只吃15分钟的鸡蛋 每周,但仅从星期三到星期五:
>>>fromdatetimeimportdatetime,timedelta>>>fromtimetableimportparse_ical,generate_timetable,clip_timetable>>>>>>icaldata=b""" ... BEGIN:VCALENDAR ... BEGIN:VEVENT ... UID:0 ... DTSTART:20150101T120000Z ... DTEND:20150101T124500Z ... RRULE:FREQ=WEEKLY;BYDAY=MO,TU;INTERVAL=2 ... SUMMARY:spam ... END:VEVENT ... BEGIN:VEVENT ... UID:1 ... DTSTART:20150101T120000Z ... DTEND:20150101T121500Z ... RRULE:FREQ=WEEKLY;BYDAY=WE,TH,FR ... SUMMARY:eggs ... END:VEVENT ... END:VCALENDAR ... """>>>calendar=parse_ical(icaldata)[0]>>>>>>start=datetime(2015,1,1)>>>end=datetime(2015,3,1)>>>timetable=clip_timetable(generate_timetable(calendar),start,end)>>>>>>time={b'spam':0,b'eggs':0}>>>forstart,end,entryintimetable:...food_name=entry['item'][b'summary'][0].value...time[food_name]+=(end-start).total_seconds()/3600>>>>>>print('spam: %.2f, eggs: %.2f'%(time[b'spam'],time[b'eggs']))spam:6.75,eggs:6.50
看起来像垃圾邮件。