Python convierte la cadena formateada de fecha y hora en segundos

Estoy tratando de decodificar una cadena de fecha a la época pero tengo dificultades para obtener la zona horaria. Esta es la última fecha de modificación de las claves de Amazon S3.

time.strptime(key.last_modified, '%Y-%m-%dT%H:%M:%S.%Z') ValueError: time data u'2013-10-20T00:41:32.000Z' does not match format '%Y-%m-%dT%H:%M:%S.%Z' 

Si me deshago de la zona horaria (.000Z), funciona, pero también necesito la zona horaria.

El .000Z no se reconoce como un desplazamiento de zona horaria. De hecho, tiene milisegundos y una zona horaria ( Z es UTC), y oficialmente , el analizador time.strptime() no puede manejar milisegundos. En algunas plataformas, %f analizará la porción de microsegundos y luego descartará la información.

El método de clase datetime.datetime.strptime() , sin embargo, puede , pero no la zona horaria, sin embargo; Analiza la Z como un literal y funciona:

 from datetime import datetime datetime.strptime(key.last_modified, '%Y-%m-%dT%H:%M:%S.%fZ') 

Manifestación:

 >>> from datetime import datetime >>> import time >>> example = u'2013-10-20T00:41:32.000Z' >>> datetime.strptime(example, '%Y-%m-%dT%H:%M:%S.%fZ') datetime.datetime(2013, 10, 20, 0, 41, 32) >>> time.strptime(example, '%Y-%m-%dT%H:%M:%S.%fZ') time.struct_time(tm_year=2013, tm_mon=10, tm_mday=20, tm_hour=0, tm_min=41, tm_sec=32, tm_wday=6, tm_yday=293, tm_isdst=-1) 

Tenga en cuenta que en mi computadora portátil Mac OS X, %f funciona para time.strptime() ; Sin embargo, no se garantiza que funcione en todas partes.

La conversión de un objeto datetime.datetime() en una tupla de tiempo se puede hacer con el método datetime.timetuple() .

2013-10-20T00:41:32.000Z

En esta cadena, 32.000 son segundos con precisión hasta el lugar mil. ‘Z’ es la zona horaria para UTC, conocida coloquialmente como hora zulú.

Si observa esta tabla en los documentos de Python 2.x, el argumento %S solo puede manejar el rango [00, 61] inclusive sin puntos decimales. El 61 es dar cuenta de los segundos de salto. Esta es la razón por la cual sus formatos de cadena no coinciden. Deberás eliminar los tres ceros que siguen al punto decimal de tu cadena.