2012-11-11 48 views
2

可能重复:
Python datetime object show wrong timezone offset不正确的时区转换在python

我有在Python时区之间的转换问题,使用pytz库(最后一个版本2012H)。在布鲁塞尔,我们通常在冬天UTC + 1小时,夏季UTC + 2小时。

我有以下代码:

from datetime import datetime 

import pytz 

brussels_tz = pytz.timezone('Europe/Brussels') 
utc_tz = pytz.utc 

def main(): 
    intermdate = datetime(2012, 07, 15, 8, 0, 0, 0, brussels_tz) 
    utcdate = intermdate.astimezone(utc_tz) 
    print "Brussels time is %s" % intermdate 
    print "UTC time is %s" % utcdate 

if __name__ == '__main__': 
    main() 

的问题是,我得到以下结果:

Brussels time is 2012-07-15 08:00:00+00:00 
UTC time is 2012-07-15 08:00:00+00:00 

所以没有什么区别。在我看来,结果应该是(夏季):

Brussels time is 2012-07-15 08:00:00+02:00 
UTC time is 2012-07-15 06:00:00+00:00 

如果我使用时区欧洲/巴黎(通常在同一时间,在布鲁塞尔)我得到更奇怪的结果:

Paris time is 2012-07-15 08:00:00+00:09 
UTC time is 2012-07-15 07:51:00+00:00 

9分钟差!!!

有人能帮助我吗?

回答

6

您需要使用.localize() method为datetime进入一个时区:

intermdate = brussels_tz.localize(datetime(2012, 07, 15, 8, 0, 0, 0)) 
utcdate = intermdate.astimezone(utc_tz) 

的输出是:

Brussels time is 2012-07-15 08:00:00+02:00 
UTC time is 2012-07-15 06:00:00+00:00 

pytz documentation

不幸的是使用标准日期时间构造函数的tzinfo参数'不适用于'pytz for ma纽约时区。

>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt) 
'2002-10-27 12:00:00 AMT+0020' 
+0

事实上它的工作原理:-)感谢您的快速回复Martijn。 – Mercator