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

时间:2013-04-19 22:55:49

标签: python datetime python-2.7 timezone dst

我希望以US/Eastern时区将日期时间转换为Budapest/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)

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

2 个答案:

答案 0 :(得分:5)

这是因为夏令时问题。传递到datetime的时间位于ET,而不是EDT,因此结果为。

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

time = ET.localize(datetime(2013, 04, 18, 0, 0))

答案 1 :(得分:0)

US/Eastern是别名。也许pytz将它视为固定到EST而不是EDT?我不确定。但请尝试America/New_York并查看是否更好。