基于我找到here的示例,我想抓取icalendar数据并对其进行处理。到目前为止我的代码:
from datetime import datetime, timedelta
from icalendar import Calendar
import urllib
import time
ics = urllib.urlopen('https://www.google.com/calendar/ical/xy/basic.ics').read()
ical1 = Calendar.from_ical(ics)
for vevent in ical1.subcomponents:
if vevent.name == "VEVENT":
title = str(vevent.get('SUMMARY').encode('utf-8'))
start = vevent.get('DTSTART').dt # datetime
end = vevent.get('DTEND').dt # datetime
print title
print start
print end
print type(start)
print "---"
它从我的谷歌日历中获取标题和开始+结束日期。这个工作和输出看起来像这样:
This is a Test Title
2012-12-20 15:00:00+00:00
2012-12-20 18:00:00+00:00
<type 'datetime.datetime'>
---
Another Title
2012-12-10
2012-12-11
<type 'datetime.date'>
---
...
如您所见,开始日期和结束日期可以是datetime.datetime
或datetime.date
类型。这取决于我是否在谷歌日历中有一整天的条目(然后它是datetime.date
)或一段时间,例如3小时(然后它是datetime.datetime
。我只需要打印今天和接下来4周的日期/日期时间。我在比较日期和日期时遇到了问题(看起来似乎不可能)所以我没有那样做。如何比较保存数据类型的日期时间和日期?如果我需要“投射”它们,那就可以了。我无法打印“今天+ 4周”,只有“4周”。
答案 0 :(得分:1)
Datetime对象可以通过调用日期对象来返回相应的日期对象:start.date()
然后可以将其与另一个日期对象进行比较:start.date() < datetime.date.today() + datetime.timedelta(4*7)
答案 1 :(得分:1)
您需要转换为常用类型进行比较。由于日期时间和日期都有共同的日期,因此转换 - &gt;是有意义的。日期类型。只需从日期时间中提取日期()。例如:
>>> import datetime
>>> datetime.date(2014, 2, 22) == datetime.datetime.now().date()
True