在python中使用datetime进行不正确的时区转换

时间:2012-11-11 15:24:34

标签: python datetime pytz

  

可能重复:
  Python datetime object show wrong timezone offset

我在使用pytz库(最后版本2012h)的Python中的时区之间进行转换时遇到问题。在布鲁塞尔,我们通常在冬季为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分钟!?!

有人能帮助我吗?

1 个答案:

答案 0 :(得分:7)

您需要使用.localize() method将日期时间移动到时区:

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不起作用。

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