Как сопоставить dateuilts.rrule и Python icalendar с учетом дневного времениPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как сопоставить dateuilts.rrule и Python icalendar с учетом дневного времени

Сообщение Anonymous »

У меня есть некоторые проблемы.

У меня есть важное событие.

Код: Выделить всё

BEGIN:VEVENT
UID:Event/termine/gps/akt@portal.augusta.de
DTSTART;TZID=CET:20150529T190000
DTEND;TZID=CET:20150529T220000
CATEGORIES:Arbeitsgruppe
DTSTAMP:20110620T075538Z
EXDATE;TZID=CET:20151225T190000
LAST-MODIFIED:20150424T201707Z
LOCATION:Vereinsräume des Augsburger Computer Forum e.V.
PRIORITY:5
RRULE:FREQ=MONTHLY;BYDAY=-1FR
SUMMARY:GPS-Arbeitsgruppe
URL:https://www.augusta.de/termine/gps
END:VEVENT
Как видите, существует правило RR, повторяющее это событие каждую последнюю пятницу месяца.

Я разобрал этот ical с помощью icalendar.

Я использую:

Код: Выделить всё

start = iobj.get( 'DTSTART' ).dt
rrset = rruleset()
rrule = iobj.get( 'RRULE' )
exdate = iobj.get( 'EXDATE' )
rrset.rrule( rrule.rrulestr( rule.to_ical(), dtstart = start ) )
for edate in exdate.dts :
rrset.exdate( edate.dt )
Пока все работает нормально.

Когда я пытаюсь найти следующее, скажем, 10 свиданий с помощью:

Код: Выделить всё

list(rrset)[:10]
Я получаю:

Код: Выделить всё

[datetime.datetime(2015, 5, 29, 19, 0, tzinfo=),
datetime.datetime(2015, 6, 26, 19, 0, tzinfo=),
datetime.datetime(2015, 7, 31, 19, 0, tzinfo=),
datetime.datetime(2015, 8, 28, 19, 0, tzinfo=),
datetime.datetime(2015, 9, 25, 19, 0, tzinfo=),
datetime.datetime(2015, 10, 30, 19, 0, tzinfo=),
datetime.datetime(2015, 11, 27, 19, 0, tzinfo=),
datetime.datetime(2015, 12, 25, 19, 0, tzinfo=),
datetime.datetime(2016, 1, 29, 19, 0, tzinfo=),
datetime.datetime(2016, 2, 26, 19, 0, tzinfo=)]
На первый взгляд это кажется нормальным, но при более глубоком рассмотрении возникает проблема, начиная с 30 октября, летнее время заканчивается 25 октября, но информация tzinfo объекта datetime по-прежнему "DstTzInfo 'CET' CEST+2:00:00 DST"

Вторая проблема заключается в том, что 25 декабря находится в этом списке, а не пропускается, как указано в ЭКСДАТА. Проблема, похоже, возникает при анализе правила exdate, летнее время рассчитывается правильно, и поэтому exdate 19:00:00+01:00 не соответствует расчетному времени повторения 19:00:00+02:00.

Я что-то делаю не так?

Преобразование всего в UTC и обработка там не помогает, потому что 17:00:00 UTC также не соответствует 18:00:00 UTC.

Преобразование всего в UTC и обработка там не помогает.>

Подробнее здесь: https://stackoverflow.com/questions/305 ... time-aware
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как найти, какие события перекрывают дату в icalendar в python?
    Anonymous » » в форуме Python
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Разбор файлов (ics/icalendar) с использованием Python
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Как при отправке события iCalendar отобразить его в теле письма?
    Anonymous » » в форуме Php
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Как при отправке события iCalendar отобразить его в теле письма?
    Anonymous » » в форуме Php
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Icalendar установил мероприятие на целый день
    Anonymous » » в форуме Python
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»