La cadena de tiempo de Python no coincide con el formato

def deadlines(t): '''shows pretty time to deadlines''' fmt = '%a %d %m %Y %I:%M %p %Z' dt = datetime.strptime( t , fmt ) print 'dt ', repr(dt) first = 'Sun 11 May 2014 05:00 PM PDT' deadlines(first) 

ValueError: datos de tiempo ‘Sun 11 May 2014 02:00 PM PDT’ no coincide con el formato ‘% a% d% m% Y% I:% M% p% Z’

¿Qué hay de malo en esto?

%m coincidencias de %m representan un decimal de dos dígitos (en [01, 12] ). Utilice %b para los nombres de los meses abreviados, o %B para los nombres de los meses completos en su lugar:

 fmt = '%a %d %b %Y %I:%M %p %Z' 

Una tabla que muestra las directivas de formato de fecha y sus significados se puede encontrar aquí .


Si tiene problemas para analizar PDT utilizando %Z :

Por los documentos de time.strptime :

El soporte para la directiva% Z se basa en los valores contenidos en tzname y si la luz del día es verdadera. Debido a esto, es específico de la plataforma, excepto para reconocer UTC y GMT, que siempre se conocen (y se consideran zonas horarias que no son de horario de verano).

Entonces, si el análisis de la cadena de fecha sin PDT funciona:

 In [73]: datetime.strptime('Sun 11 May 2014 05:00 PM', '%a %d %b %Y %I:%M %p') Out[73]: datetime.datetime(2014, 5, 11, 17, 0) 

pero

 datetime.strptime('Sun 11 May 2014 05:00 PM PDT', '%a %d %b %Y %I:%M %p %Z') 

eleva un ValueError, entonces es posible que necesite quitar el nombre de la zona horaria (son, en general, ambiguos de todos modos ):

 In [10]: datestring = 'Sun 11 May 2014 05:00 PM PDT' In [11]: datestring, _ = datestring.rsplit(' ', 1) In [12]: datestring Out[12]: 'Sun 11 May 2014 05:00 PM' In [13]: datetime.strptime(datestring, '%a %d %b %Y %I:%M %p') Out[13]: datetime.datetime(2014, 5, 11, 17, 0) 

o use dateutil :

 In [1]: import dateutil.parser as parser In [2]: parser.parse('Sun 11 May 2014 05:00 PM PDT') Out[2]: datetime.datetime(2014, 5, 11, 17, 0)