2014-02-22 274 views
3

根据我发现的示例here我想抓取icalendar数据并对其进行处理。这是我的代码到目前为止:python日期时间和日期比较

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周”

回答

1

您将需要转换为普通类型的比较,因为这两个日期时间的和日期的有共同的日期,它使有意义转换 - >日期类型,只需提取da te()从日期时间开始。例如:

>>> import datetime 
>>> datetime.date(2014, 2, 22) == datetime.datetime.now().date() 
True 
1

日期时间对象可以返回一个适当的日期对象通过调用日期他们:start.date()然后可以与另一个日期对象:start.date() < datetime.date.today() + datetime.timedelta(4*7)