python icalendar правильно устанавливает dtstart

Я настраиваю скрипт для форматирования набора хоккейных расписаний в файлы .ics, используя python и пакет python iCalendar.

Когда я установил:

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, но, видимо, я использую его неправильно?


person klreeher    schedule 08.09.2014    source источник


Ответы (3)


я не знаю, что у вас есть в 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))

вы должны изменить «СОЗДАНИЕ» на тип даты, который вы хотите

person persian_dev    schedule 09.09.2014

Вы можете использовать функцию vDatetime пакета icalendar для объекта datetime python.

from icalendar import Calendar, Event, vDatetime
event.add('dtstart', vDatetime(starttime))
person edleciel    schedule 05.01.2020

Не совсем уверен, в чем вы видите проблему:

RFC5545 раздел 3.3.5 (ссылка) гласит:

Имя значения: ДАТА-ВРЕМЯ

Назначение: этот тип значения используется для определения значений, указывающих точную календарную дату и время суток.

Определение формата: этот тип значения определяется следующей нотацией:

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

[...] Например, следующее представляет 18 января 1998 г., 23:00: 19980118T230000

Что очень похоже (и вполне нормально) на то, что сгенерировал iCalendar.

Если у вас есть конкретная проблема, не могли бы вы уточнить желаемый результат?

person Auberon Vacher    schedule 15.09.2014