这个python时区转换有什么问题?

kis*_*rgy 2 python timezone datetime dst python-2.7

我想通过这种方式将带有US/EasternBudapest/Europe区的日期时间转换为时区:

import pytz
from datetime import datetime

ET = pytz.timezone('US/Eastern')
CET = pytz.timezone('Europe/Budapest')

time = datetime(2013, 04, 18, 0, 0, tzinfo=ET)
newTime = time.astimezone(CET)
Run Code Online (Sandbox Code Playgroud)

这导致newTime为:datetime.datetime(2013, 4, 18, 7, 0, tzinfo=<DstTzInfo 'Europe/Budapest' CEST+2:00:00 DST>),但它应该2013,04,18,6,0根据time.istimeanddate.com转换器.我做错了什么?

tom*_*asz 5

这是因为夏令时问题.传递的时间datetime是,而ET不是EDT结果.

看一下pytz文档,首选的方法是使用localize方法,而不是传递tzinfo.如果您修改代码以使用以下行,您将获得预期的结果:

time = ET.localize(datetime(2013, 04, 18, 0, 0))
Run Code Online (Sandbox Code Playgroud)