Python 在运行时更改变量/时区?

标签 python timezone icalendar

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

首先:我不是 Python 程序员,该脚本是由 friend 编写的(我认为他的大部分内容来自示例)。

该脚本的用途:将日历信息(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 (例如:欧洲/斯德哥尔摩)而不是CETCEST

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

关于Python 在运行时更改变量/时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29016724/

相关文章:

python - 如何在 jenkins 构建中激活 conda 环境

python - 为什么 Python 生成器函数在语法上与 'regular' 函数没有不同的表示法?

exchange-server - ICS电子邮件附件不适用于Exchange用户

Python 3 - 从摩尔斯电码翻译时如何将每个句子的第一个字母大写

python - 如何使用 python 登录我的 Skype 企业帐户?

php - 使用 UTC 时间返回 mysql 日期时间为几小时前、几天前等?

用于查找位置时区的 Ruby gem

php - 使用 MYSQL 将日期和时间从 UTC 转换为服务器上客户端的本地时间

android - android android.database.sqlite.SQLiteException : unrecognized token 中的 SQL 错误

ruby-on-rails - 如何通过 Icalendar gem 获取 RSVP 按钮