我希望以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.is和timeanddate.com转换器,它应为2013,04,18,6,0
。我做错了什么?
答案 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
并查看是否更好。