使用pytz的时间转换不准确

时间:2014-05-06 14:13:17

标签: python pytz

我正在使用'2014.2'pytz。我正在使用以下过程将Asia/Kuwait时区(即本地时间)转换为UTC时间:

>>> from_date = "2014/05/06 17:07"
>>> from_date = dateutil.parser.parse(from_date)
>>> utc=timezone('UTC')
>>> from_date = from_date.replace(tzinfo=timezone('Asia/Kuwait')).astimezone(utc)
>>> from_date
datetime.datetime(2014, 5, 6, 13, 55, tzinfo=<UTC>)
>>> from_date.strftime("%b %d %Y %H:%M:%S" )
'May 06 2014 13:55:00'

我发现的实际UTC时间为May 06 2014 14:06:00http://www.worldtimeserver.com/current_time_in_UTC.aspx为什么pytz没有完全转换为实际时间。如您所见,10-11 minutes.

之间存在时差

1 个答案:

答案 0 :(得分:8)

请勿将datetime.replace()pytz时区一起使用。来自pytz documentation

  

不幸的是,对于许多时区,使用标准日期时间构造函数的'tzinfo参数''与pytz不起作用。

它不起作用的原因是pytz时区包含历史数据,datetime无法处理这些数据。

请改用专用的timezone.localize()方法:

>>> import dateutil.parser
>>> from pytz import timezone
>>> from_date = "2014/05/06 17:07"
>>> from_date = dateutil.parser.parse(from_date)
>>> from_date = timezone('Asia/Kuwait').localize(from_date).astimezone(timezone('UTC'))
>>> from_date
datetime.datetime(2014, 5, 6, 14, 7, tzinfo=<UTC>)
>>> from_date.strftime("%b %d %Y %H:%M:%S" )
'May 06 2014 14:07:00'

timezone.localize()方法正确地将时区应用于天真的datetime对象。