关于python:错误的时区? 30分钟而不是1小时

Wrong timezone? 30min instead 1hr

本问题已经有最佳答案,请猛点这里访问。

有了这个,我现在挣扎了几个小时。 代码比我在这里提供的示例大得多,但它分解为:

我有一个天真的日期时间对象,我想将其转换为UTC时间,但这不会按预期工作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import datetime
import pytz

# Following is a naive datetime object, but we know the user meant
# timezone Europe/Zurich

zurich = datetime.datetime(2016, 1, 8, 7, 10)
# datetime.datetime(2016, 1, 8, 7, 10)

# So I'm now converting it to a datetime object which is aware of the
# timezone

zurich = zurich.replace(tzinfo=pytz.timezone('Europe/Zurich'))
# datetime.datetime(2016, 1, 8, 7, 10, tzinfo=<DstTzInfo 'Europe/Zurich' BMT+0:30:00 STD>)

# Let's convert to UTC

zurich = zurich.astimezone(pytz.utc)
# datetime.datetime(2016, 1, 8, 6, 40, tzinfo=<UTC>)

与UTC时间相比,苏黎世的偏移量为+01:00(夏令时)或+02:00(夏令时)。 为什么Python认为它是+00:30 ?!

任何帮助都非常感谢(我已经开始拔头发了)。


我在类似的问题上找到了这个答案,如果我用另一种方式重写你的代码,它似乎可以满足你的要求

1
2
3
4
5
import datetime
import pytz
zurich = pytz.timezone('Europe/Zurich').localize(datetime.datetime(2016,1,8,7,10), is_dst=None)
zurich = zurich.astimezone(pytz.utc)
# datetime.datetime(2016, 1, 8, 6, 10, tzinfo=<UTC>)