2012-02-24 3 views
11

Utilizzo l'API Paypal e torno a un timestamp nel seguente formato. Si cerca di analizzare questo a un oggetto datetime con strptime, ma ottengo il seguente errore:Conversione della stringa del tempo dell'utc sull'oggetto datetime

(Pdb) datetime.strptime('2012-03-01T10:00:00Z','%Y-%M-%dT%H:%M:%SZ') 
*** error: redefinition of group name 'M' as group 5; was group 2 

Inoltre, come questo formato dovrebbe essere un formato abbastanza standard, non v'è una funzione disponibile per questo?

EDIT:

Ok sembra essere un errore di battitura. La prima% M dovrebbe essere% m

risposta

7

Sembra che tu stia mescolando %M (minuto) e %m (mese).

2

Il problema è che si utilizza %M due volte. Utilizzare %m per i mesi:

>>> datetime.strptime('2012-03-01T10:00:00Z','%Y-%m-%dT%H:%M:%SZ') 
datetime.datetime(2012, 3, 1, 10, 0) 
+0

Perché dovrei usare il tempo? Ha senso usare datetime qui giusto? Poiché questo è sia una data che un'ora. –

+0

@arno_v: capisco, stai usando il metodo di classe 'datetime.strptime'. Mi dispiace per quello –

2

Hai un errore di battitura. %M viene utilizzato due volte. Intendevi usare %m per il mese. Dal docs:

%m Month as a decimal number [01,12]. 
%M Minute as a decimal number [00,59]. 
21

Il parser dal dateutil è tuo amico.

Dovrete installare pip dateutil ma hai Salva sacchi e sacchetti di codice per la conversione:

pip install python-dateutil 

è possibile utilizzarlo in questo modo.

from dateutil import parser 
ds = '2012-03-01T10:00:00Z' # or any date sting of differing formats. 
date = parser.parse(ds) 

Troverete si può trattare con quasi tutti i formati data stringa con questo parser e si otterrà un bel data standard di Python di nuovo

+0

Ah grazie! Dato che uso già il dateutil in questo progetto, questo sembra il modo più elegante per farlo. –

+0

Si prega di votare e modificare questo per la vostra risposta preferita quindi per favore @arno_v –