2016-07-04 20 views
5

Sto provando a creare semplicemente un datetime oggetto dalla seguente data: "Ven Mar 11 15:59:57 EST 2016" utilizzando il formato: '% a% b% d% H:% M:% S% Z% Y'.ValueError time data 'Ven Mar 11 15:59:57 EST 2016' non corrisponde al formato '% a% b% d% H:% M:% S% Z% Y'

Ecco il codice.

from datetime import datetime 
date = datetime.strptime('Fri Mar 11 15:59:57 EST 2016', '%a %b %d %H:%M:%S %Z %Y') 

Tuttavia, questo genera un errore ValueError come mostrato di seguito.

ValueError: time data 'Fri Mar 11 15:59:57 EST 2016' does not match format '%a %b %d %H:%M:%S %Z %Y' 

Forse mi manca qualcosa di evidentemente sbagliato con la mia stringa di formato, ma l'ho controllato più e più volte. Qualsiasi aiuto sarebbe molto apprezzato, grazie.

Modifica per riflettere commenti/domande per ulteriori informazioni:

La versione di Python che sto utilizzando è 2.7.6.

Utilizzando il comando 'locale' su Ubuntu 14.04 ottengo questo:

$ locale 
LANG=en_US.UTF-8 
LANGUAGE= 
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL= 
+2

Ho provato il codice e funziona per me; quale versione di Python stai usando? –

+0

Sto usando Python 2.7.6 –

+0

Stai per caso usando un computer che usa impostazioni locali non inglesi? –

risposta

8

Per lo specificatore% Z, strptime riconosce solo "UTC", "GMT" e tutto ciò che è in time.tzname (quindi se riconosce "EST" dipenderà dal fuso orario del tuo computer). Questo è issue 22377.

See: Python strptime() and timezones? e Parsing date/time string with timezone abbreviated name in Python?

L'opzione migliore per il parsing fusi orari che includono un fuso orario leggibile è ancora di utilizzare la terza parte python-dateutil libreria:

import dateutil 
date = dateutil.parse('Fri Mar 11 15:59:57 EST 2016' 

Se non è possibile installare python -dateutil, potresti eliminare il fuso orario e analizzarlo manualmente ad es usando una ricerca nel dizionario.

+0

Il problema si verifica anche qui. Infatti, ho capito che il problema era la sottostringa 'EST' e hai appena confermato il problema. In questo caso, esiste un modo sicuro per analizzare queste stringhe ed evitare questo problema? –

+1

@ JeandersonBarrosCândido l'opzione migliore è usare python-dateutil. Ho aggiornato la mia risposta per aggiungerla, grazie. – ecatmur

+0

E 'stato. Grazie! –

Problemi correlati