Python 改变 variable/timezone 而 运行?

Python changes variable/timezone while running?

好的,这是我遇到的最奇怪的错误之一!

首先:我不是 Python 程序员,脚本是朋友写的(我认为他从一个例子中获取了大部分内容)。

脚本的目的:将日历信息(CET 时间)从 XML 文件解析为 ics 文件,以便人们可以添加它他们的 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

我很高兴能得到所有关于如何解决这个问题的想法!

如果 ltpytz 时区,那么您可能需要更改代码:

datetime.combine(d,t).replace(tzinfo=lt)

为此:

lt.localize(datetime.combine(d,t))

您可能还应该使用 full time zone name(例如:Europe/Stockholm)而不是 CETCEST

此外,您应该知道summer time begins in Europe on March 29, 2015。由于您的某些日期在更改之前,有些日期在更改之后,因此您确实会有一些在 CET 中,一些在 CEST 中。