Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 错误的时区?30分钟,而不是1小时_Python_Datetime_Pytz - Fatal编程技术网

Python 错误的时区?30分钟,而不是1小时

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) #

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

我有一个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)
# 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,以便明确地转换时间。