我正在设置一个脚本,使用python和python包iCalendar将一堆曲棍球时间表格式化为.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
很明显,我应该使用日期时间对象,但显然我没有正确使用它?
答案 0 :(得分:0)
我不知道你在game_datetime中有什么,但我像你一样面对这个问题,并且像日期类型属性一样使用它并且它的工作:
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))
你应该改变“创造”&#39;到你想要的日期类型
答案 1 :(得分:0)
不太确定您所看到的问题是什么:
RFC5545
第3.3.5节(link),声明:
值名称:DATE-TIME
目的:此值类型用于标识指定a的值 精确的日历日期和时间。
格式定义:此值类型由以下定义 符号:
date-time = date "T" time ;As specified in the DATE and TIME ;value definitions
[...] 例如,以下代表1998年1月18日 晚上11点: 19980118T230000
与iCalendar生成的内容非常相似(并且非常正常)。
如果您有特定问题,是否可以澄清所需的输出?
答案 2 :(得分:0)
您可以在python datetime对象上使用icalendar包的vDatetime函数
from icalendar import Calendar, Event, vDatetime
event.add('dtstart', vDatetime(starttime))