使用icalendar解析日期并与python datetime进行比较
我有一个.ics文件,我想从中提取今天发生的所有事件。我想我在将icalendar DTSTART和DTEND转换为python日期时间时遇到了问题。我已经试着在网站上查看文档。我得到的列表是空的,不应该是这样 这是我的代码:使用icalendar解析日期并与python datetime进行比较,python,datetime,icalendar,Python,Datetime,Icalendar,我有一个.ics文件,我想从中提取今天发生的所有事件。我想我在将icalendar DTSTART和DTEND转换为python日期时间时遇到了问题。我已经试着在网站上查看文档。我得到的列表是空的,不应该是这样 这是我的代码: import urllib2 import json from datetime import datetime from icalendar import Calendar, Event, vDatetime def getTodayEvents(icsFile):
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
检查
中的数据类型或内容是否存在差异如果startDTSTART,DTEND属性具有.dt
属性:
#!/usr/bin/env python
import json
from datetime import date
import icalendar # $ pip install icalendar
today = date.today()
calendar = icalendar.Calendar.from_ical(ics_file)
entries = [dict(summary=event['SUMMARY'])
for event in calendar.walk('VEVENT')
if event['DTSTART'].dt <= today <= event['DTEND'].dt]
print(json.dumps(entries, indent=2, sort_keys=True))
事件
对象有一个方法.decoded()
,它为您提供一个datetime.date
对象(在您的例子中,.ics只有一个日期)或datetime.datetime
对象。对于datetime.datetime
对象,还需要转换正确的时区
为了进行统一的比较,我将所有内容转换为字符串,然后比较字符串。最后,我写了一个ISeventoday方法:
从datetime导入datetime、时区、timedelta
def isEventToday(事件):
如果event.get('dtstart')==无:
dtstart=“”
其他:
temp=已解码的事件('dtstart')
如果isinstance(临时、日期时间):
dtstart=temp.astimezone().strftime(“%Y-%m-%d”)
其他:
dtstart=临时strftime(“%Y-%m-%d”)
如果event.get('dtend')==无:
dtend=“”
其他:
temp=已解码的事件('dtend')
如果isinstance(临时、日期时间):
dtend=temp.astimezone().strftime(“%Y-%m-%d”)
其他:
#day events的数据结束日期是事件的第二天,因此
#需要减去一个!
dtend=(temp-timedelta(days=1)).strftime(“%Y-%m-%d”)
今天=日期时间。今天().date().strftime(“%Y-%m-%d”)
如果dtstart!=“”和dtstart==今天:
返回真值
如果dtend!=“”和dtend==今天:
返回真值
如果dtstart!=“还有dtend!”“”然后开始打电话给JFS。谢谢。这太重要了,我希望能在iCalendar文档中解释得更清楚。有时返回datetime.datetime
,有时返回datetime.date
对象?@jhabbott:对于问题的输入,它返回date
。否则,我不知道
start = vDatetime.from_ical(dtstart,'Europe/Amsterdam') #or wherever you are
#!/usr/bin/env python
import json
from datetime import date
import icalendar # $ pip install icalendar
today = date.today()
calendar = icalendar.Calendar.from_ical(ics_file)
entries = [dict(summary=event['SUMMARY'])
for event in calendar.walk('VEVENT')
if event['DTSTART'].dt <= today <= event['DTEND'].dt]
print(json.dumps(entries, indent=2, sort_keys=True))
[
{
"summary": "Jonny Smith"
}
]