2012-02-24 18 views
11

Estoy usando la API de Paypal y obtengo una marca de tiempo en el siguiente formato. Se trata de analizar a un objeto de fecha y hora utilizando strptime, pero me da el siguiente error:Convirtiendo cadena de tiempo utc a objeto 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 

También, ya que este formato se supone que es un formato bastante estándar que no es una función disponible para esto?

EDIT:

Ok parece ser un error tipográfico. Primero% M debe ser% m

Respuesta

7

Parece que está mezclando %M (minuto) y %m (mes).

2

El problema es que usa %M dos veces. Utilice %m para los meses:

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

¿Por qué debería utilizar el tiempo? Tiene sentido usar datetime aquí ¿verdad? Dado que esto es tanto una fecha como una hora. –

+0

@arno_v: Ya veo, estás usando el método de clase 'datetime.strptime'. Lo siento por eso. –

2

Usted tiene un error tipográfico. %M se usa dos veces. Querías usar %m para el mes. Desde el docs:

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

El analizador de dateutil es su amigo.

Vas a tener que instalar pip dateutil pero has guardar bolsas y bolsas de código de conversión de la fecha:

pip install python-dateutil 

Usted puede utilizar de esta manera.

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

Usted encontrará que usted puede hacer frente a casi cualquier formato de cadena de fecha con este analizador y obtendrá un buen pitón fecha posterior estándar

+0

¡Ah, gracias! Como ya uso dateutil en este proyecto, esta parece ser la forma más elegante de hacerlo. –

+0

Por favor, vote y cambie esto a su respuesta favorita, por favor, @arno_v –

Cuestiones relacionadas