Python 错误的时区?30分钟,而不是1小时
有了这个,我挣扎了几个小时。代码比我在这里提供的示例要大得多,但它分解为: 我有一个datetime对象是幼稚的,我想将其转换为UTC时间,但这并没有按预期工作Python 错误的时区?30分钟,而不是1小时,python,datetime,pytz,Python,Datetime,Pytz,有了这个,我挣扎了几个小时。代码比我在这里提供的示例要大得多,但它分解为: 我有一个datetime对象是幼稚的,我想将其转换为UTC时间,但这并没有按预期工作 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) #
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>)
导入日期时间
进口皮茨
#下面是一个简单的datetime对象,但我们知道用户的意思
#欧洲时区/苏黎世
苏黎世=datetime.datetime(2016,1,8,7,10)
#datetime.datetime(2016,1,8,7,10)
#所以我现在把它转换成一个datetime对象,它知道
#时区
苏黎世=苏黎世.replace(tzinfo=pytz.timezone('Europe/zurich'))
#datetime.datetime(2016,1,8,7,10,tzinfo=)
#让我们转换成UTC
苏黎世=苏黎世astimezone(pytz.utc)
#datetime.datetime(2016,1,8,6,40,tzinfo=)
与UTC时间相比,苏黎世的偏移量为+01:00(夏令时)或+02:00(夏令时)。为什么Python认为现在是+00:30
非常感谢您的帮助(我已经开始拔头发了)。我找到了一个类似问题的答案,如果我以另一种方式重写您的代码,它似乎可以满足您的要求
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>)
导入日期时间
进口皮茨
苏黎世=pytz.时区(“欧洲/苏黎世”).本地化(datetime.datetime(2016,1,8,7,10),is_dst=无)
苏黎世=苏黎世astimezone(pytz.utc)
#datetime.datetime(2016,1,8,6,10,tzinfo=)
在这里的文档中找到了它:不幸的是,在许多时区使用标准datetime构造函数的tzinfo参数“不起作用”。它不起作用,甚至语法也不够,因为如果时区位于DST时间或STD时间,就不能在不知情的情况下盲目替换。因此,必须调用pytz的智能函数,该函数获取时间和区域,应用当前政府规则,并将区域自定义为“CET+1:00标准”或“CEST+2:00标准”。标准datetime方法没有回调tzinfo来定制它,甚至在点从dst更改为STD前后一小时必须使用is_dst
pameter,以便明确地转换时间。