Хорошо, это одна из самых странных ошибок, с которыми я столкнулся!Python меняет переменную/часовой пояс во время работы?
Во-первых: Я не программист на Python, а сценарий написан другом (который, как я думаю, взял большую часть из примера).
Цель сценария: Для разбора календаря информации (раз в СЕТ) из XML-файла в качестве ИКС-файл, чтобы люди могли добавить его в свои Google календари и т.д. (файлы постоянно обновляются).
Проблема, которую я попытался исправить: Сделать это импортировать в календарь Google правильно (с корректным разом и т.д.)
Что я сделал: Изменена преобразование времени включить часовые пояса.
Странная проблема: При выполнении часовой пояс изменяется от CET до CEST (в том же самом случае, насколько я вижу). Переменная, которая содержит часовой пояс, назначается только один раз (перед циклом, который проходит через события), поэтому я не могу в своей жизни выяснить, что вызывает проблему!
Часть выхода:
BEGIN:VEVENT
SUMMARY:Ungdomsaktivitet
DTSTART;TZID=CET;VALUE=DATE-TIME:20150327T193000
DTEND;TZID=CET;VALUE=DATE-TIME:20150327T193000
LOCATION:Kaj
END:VEVENT
BEGIN:VEVENT
SUMMARY:Ungdomsmöte
DTSTART;TZID=CET;VALUE=DATE-TIME:20150328T193000
DTEND;TZID=CET;VALUE=DATE-TIME:20150328T193000
DESCRIPTION:Ekumeniskt ungdomsmöte mellan Skara\, Götene & Lidköping. S
amuel Östersjö predikar\, Elias Olofsson med team leder lovsång.
LOCATION:Pingstkyrkan\, Lidköping
END:VEVENT
BEGIN:VEVENT
SUMMARY:Bön
DTSTART;TZID=CEST;VALUE=DATE-TIME:20150329T100000
DTEND;TZID=CEST;VALUE=DATE-TIME:20150329T100000
LOCATION:Pingstkyrkan\, Lidköping
END:VEVENT
BEGIN:VEVENT
SUMMARY:Gudstjänst
DTSTART;TZID=CEST;VALUE=DATE-TIME:20150329T110000
DTEND;TZID=CEST;VALUE=DATE-TIME:20150329T110000
DESCRIPTION:Evangelicenter
LOCATION:Pingstkyrkan\, Lidköping
END:VEVENT
BEGIN:VEVENT
SUMMARY:Ekumenisk bön
DTSTART;TZID=CEST;VALUE=DATE-TIME:20150331T100000
DTEND;TZID=CEST;VALUE=DATE-TIME:20150331T100000
DESCRIPTION:i Baptistkyrkan
LOCATION:Baptistkyrkan\, Lidköping
END:VEVENT
код, который имеет дело с временем:
lt = LocalTimezone()
# [...]
d = datetime.strptime(dateStr, "%Y-%m-%d")
t = datetime.strptime(timeStr, "%H:%M:%S").time()
event.add('dtstart', datetime.combine(d,t).replace(tzinfo=lt))
event.add('dtend', datetime.combine(d,t).replace(tzinfo=lt))
Полный код:http://pastebin.com/Gf68BWc2
Я рад для всех идей, которые я могу почини это!
Не используйте 'LocalTimezone()'; он основан на модуле 'time' и поэтому может провалиться в некоторых часовых поясах. Использовать 'tzlocal.get_localzone()' вместо этого.] (Https://pypi.python.org/pypi/tzlocal) – jfs
несвязанный: некоторые библиотеки календарей по своей природе ошибочны и ожидают, что все объекты datetime находятся в UTC, даже если вы передадите (с привязанным часовым поясом). Преобразуйте в/из UTC, если необходимо. – jfs