2014-05-06 27 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