1

我正在设置一个脚本,使用 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

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

4

3 回答 3

1

您可以在 python 日期时间对象上使用 icalendar 包的 vDatetime 函数

from icalendar import Calendar, Event, vDatetime
event.add('dtstart', vDatetime(starttime))
于 2020-01-05T14:59:21.270 回答
0

不太确定你看到了什么问题:

RFC5545第 3.3.5 节([链接][1])指出:

值名称:日期时间

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

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

  date-time  = date "T" time ;As specified in the DATE and TIME
                              ;value definitions

[...] 例如,以下表示 1998 年 1 月 18 日晚上 11 点:19980118T230000

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

如果您有特定问题,您能否阐明所需的输出?[1]:https ://www.rfc-editor.org/rfc/rfc5545#section-3.3.5

于 2014-09-15T05:05:55.323 回答
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))

您应该将“创建”更改为您想要的日期类型

于 2014-09-09T18:38:35.300 回答