2014-02-22 328 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)