python icalendar设置dtstart是否正确

python icalendar设置dtstart是否正确,python,datetime,icalendar,rfc5545,Python,Datetime,Icalendar,Rfc5545,我正在设置一个脚本,使用python和python包将一系列曲棍球时间表格式化为.ics文件 当我设定: event.add('dtstart', game_datetime[i]) event.add('dtend', game_datetime[i]+timedelta(hours=i)) 我在生成的.ics文件中得到以下内容: DTSTART;VALUE=DATE-TIME:20141019T140500 DTEND;VALUE=DATE-TIME:20141019T160500 显然

我正在设置一个脚本,使用python和python包将一系列曲棍球时间表格式化为.ics文件

当我设定:

event.add('dtstart', game_datetime[i])
event.add('dtend', game_datetime[i]+timedelta(hours=i))
我在生成的.ics文件中得到以下内容:

DTSTART;VALUE=DATE-TIME:20141019T140500
DTEND;VALUE=DATE-TIME:20141019T160500
显然不理想,;它似乎在传递对象,而不是值。因此,当我尝试使用strftime()设置它时,如下所示:

#event.add('dtstart', game_datetime[i].strftime('%Y%m%dT%H%M%SZ'))
#event.add('dtend', (game_datetime[i]+timedelta(hours=i)).strftime('%Y%m%dT%H%M%SZ'))
我得到以下错误:

File "D:\schedule_format.py", line 72, in <module>
event.add('dtstart', game_datetime[i].strftime('%Y%m%dT%H%M%SZ'))
File "C:\Python27\lib\site-packages\icalendar-3.9.dev0-py2.7.egg\icalendar\cal.py", line 171, in add
value = self._encode(name, value, parameters, encode)
File "C:\Python27\lib\site-packages\icalendar-3.9.dev0-py2.7.egg\icalendar\cal.py", line 123, in _encode
obj = klass(value)
File "C:\Python27\lib\site-packages\icalendar-3.9.dev0-py2.7.egg\icalendar\prop.py", line 276, in __init__
raise ValueError('You must use datetime, date, timedelta or time')
ValueError: You must use datetime, date, timedelta or time
文件“D:\schedule\u format.py”,第72行,在
事件.add('dtstart',game_datetime[i].strftime('%Y%m%dT%H%m%SZ'))
文件“C:\Python27\lib\site packages\icalendar-3.9.dev0-py2.7.egg\icalendar\cal.py”,第171行,添加
值=自身编码(名称、值、参数、编码)
文件“C:\Python27\lib\site packages\icalendar-3.9.dev0-py2.7.egg\icalendar\cal.py”,第123行,编码为
obj=klass(值)
文件“C:\Python27\lib\site packages\icalendar-3.9.dev0-py2.7.egg\icalendar\prop.py”,第276行,在uu init中__
raise VALUERROR('您必须使用datetime、date、TIMEDTA或time')
ValueError:必须使用datetime、date、timedelta或time

显然我应该使用datetime对象,但显然我没有正确使用它

我不知道您在game_datetime中有什么,但我和您一样面临这个问题,并使用date type属性和它的工作:

from time import strftime,gmtime
from icalendar import Calendar,Parameters,Todo
import icalendar
from datetime import *

year = int(strftime("%Y", gmtime()))
month = int(strftime("%m", gmtime()))
day = int(strftime("%d", gmtime()))
hour = int(strftime("%H", gmtime()))
minute = int(strftime("%M", gmtime()))
second = int(strftime("%S", gmtime()))

temp = Todo()
temp.add('CREATED',datetime(year,month,day,hour,minute,second))

您应该将“已创建”更改为所需的日期类型

不太确定您认为是什么问题:

RFC5545
第3.3.5节()规定:

值名称:日期时间

用途:此值类型用于标识指定 精确的日历日期和时间

格式定义:此值类型由以下内容定义 符号:

  date-time  = date "T" time ;As specified in the DATE and TIME
                              ;value definitions
[……] 例如,以下代表1998年1月18日,在 晚上十一时: 19980118T230000

这看起来与iCalendar生成的非常相似(而且非常正常)


如果您有特定的问题,能否澄清所需的输出?

您可以在python datetime对象上使用icalendar包的vDatetime函数

from icalendar import Calendar, Event, vDatetime
event.add('dtstart', vDatetime(starttime))