1
有了这个我现在挣扎了几个小时。代码比我在这里提供的例子大得多,但它分解为:错误的时区? 30分钟,而不是1小时
我有一个天真的日期时间对象,我想将它转换为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>)
与UTC时间相比,苏黎世的偏移量为+01:00(夏令时)或+02:00(夏令时)。为什么Python认为它是+00:30?
任何帮助高度赞赏(我已经开始拔出我的头发了)。
在这里的文档发现:HTTP://pytz.sourceforge .net /#example-usage](http://pytz.sourceforge.net/#example-usage) 不幸的是,对于许多时区,使用标准datetime构造函数的tzinfo参数''不适用于pytz。 – Daniel
它不能工作,甚至语法也不够,因为如果一个时区大陆/城市处于DST时间或STD时间,则不能在没有知识的情况下盲目更换时区。因此,必须调用pytz的智能函数来获取时间和区域,应用当前的政府规则并将区域定制为“CET + 1:00 STD”或“CEST + 2:00 DST”。标准的日期时间方法没有回调到tzinfo来定制它,并且甚至必须在从DST到STD的点改变之前和之后一小时使用'is_dst' pameter,以便明确地转换时间。 – hynekcer