我有一个.ics文件,我想从中提取今天发生的所有事件。我想我在将icalendar、DTSTART和DTEND转换为python日期时时遇到了问题。我在icalendar.readthedocs.org尝试过跟踪文档。我得到的清单是空的,不应该是这样的。
这是我的密码:
import urllib2
import json
from datetime import datetime
from icalendar import Calendar, Event, vDatetime
def getTodayEvents(icsFile):
cal = Calendar.from_ical(icsFile)
today = datetime.now().date()
entries = []
for event in cal.walk('VEVENT'):
dtstart = event['DTSTART']
dtend = event['DTEND']
start = vDatetime.from_ical(dtstart) //Trouble here?
end = vDatetime.from_ical(dtend)
if start <= today <= end:
entry = {'summary' : event['SUMMARY'] }
entries.append(entry)
output = json.dumps(entries)
return output //This list is empty这就是和ics条目的样子:
BEGIN:VEVENT
SUMMARY:Jonny Smith
DTSTART;VALUE=DATE:20140731
DTEND;VALUE=DATE:20150802
UID: 12345
CLASS:PUBLIC
PRIORITY:5
DTSTAMP:20141006T160145Z
TRANSP:OPAQUE
STATUS:CONFIRMED
SEQUENCE:0
LOCATION:Mansfield\, GA
X-MICROSOFT-CDO-APPT-SEQUENCE:0
X-MICROSOFT-CDO-BUSYSTATUS:FREE
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
X-MICROSOFT-CDO-IMPORTANCE:1
X-MICROSOFT-CDO-INSTTYPE:0
X-MICROSOFT-DISALLOW-COUNTER:FALSE
END:VEVENT发布于 2014-10-07 15:42:03
检查if start <= today <= end:比较中数据类型或内容之间是否存在差异。看看这三个变量的类型和内容(大约在调试器中)。我认为你会发现比较是比较合法的东西,但不兼容给你所期望的答案(例如,这个事件的开始和结束时间是否与今天的日期重叠?)
您的today是一个datetime结构,可以根据您的意愿与其他datetime进行比较。也许您的vDatetime.from_ical(dtstart)返回的不是datetime。不过,快速浏览一下来源看起来应该会返回一个datetime。也许你有时区问题?查看这三种内容的内容,并检查哪些是<、==或>其他。
如果是这样的话,在调用vDatetime.from_ical()调用时添加一个时区;
start = vDatetime.from_ical(dtstart,'Europe/Amsterdam') #or wherever you are您在.ics的时间表示Z -即格林尼治标准时间。
如果您需要对日期做更多的工作,请参见与时间一起工作。
https://stackoverflow.com/questions/26238835
复制相似问题