Python日期时间和日期比较

3

根据我在这里找到的例子,我想抓取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.datetimedatetime.date 类型。这取决于我是否有一个为期两天的谷歌日历条目(那么它就是一个datetime.date),或者持续一段时间,例如3小时的时间段(那么它就是一个datetime.datetime)。我只需要打印从今天开始到未来4周内的日期/时间。我在比较日期和日期时间方面遇到了问题(似乎不可能),因此我没有完成它。如何比较日期时间并保留数据类型?如果需要“转换”它们,那也没关系。我无法打印“今天+4周”,只能打印“4周”。

2个回答

1
你需要将其转换为通用类型进行比较。由于datetime和date都有共同的日期,因此将它们转换为date类型是有意义的。只需从datetime中提取date()即可。例如:
>>> import datetime
>>> datetime.date(2014, 2, 22) == datetime.datetime.now().date()
True

1
Datetime对象可以通过调用date返回一个合适的日期对象:start.date(),然后可以将其与另一个日期对象进行比较:start.date() < datetime.date.today() + datetime.timedelta(4*7)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接