2014-05-06 24 views
2

我正在使用pytz'2014.2'版本。我使用下面的过程转换Asia/Kuwait时区即当地时间UTC时间:使用pytz进行时间转换并不准确

>>> 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:00我发现地:http://www.worldtimeserver.com/current_time_in_UTC.aspx为什么pytz是不完全转化为实际的时间。如您所见,10-11 minutes.

+0

'est = timezone('UTC')'?这是UTC,而不是EST .. –

+0

而实际的UTC时间是2014年5月6日14:07:00,更可能。 :-) –

+0

当(1950?)时,科威特过去的UTC偏移量为+3:12:00。时区对象默认为。正如Martijn的回答指出的那样,您需要本地化它 – imran

回答

7

请勿使用datetime.replace()pytz时区。从pytz documentation

不幸的是,对于许多时区,使用标准datetime构造函数的'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对象。

+0

谢谢你。 '本地化()',它是。 – pynovice