Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用icalendar解析日期并与python datetime进行比较_Python_Datetime_Icalendar - Fatal编程技术网

使用icalendar解析日期并与python datetime进行比较

使用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):

我有一个.ics文件,我想从中提取今天发生的所有事件。我想我在将icalendar DTSTART和DTEND转换为python日期时间时遇到了问题。我已经试着在网站上查看文档。我得到的列表是空的,不应该是这样

这是我的代码:

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"
  }
]