convertir el tiempo de época con milisegundos a datetime

He utilizado una secuencia de comandos ruby ​​para convertir la marca de tiempo iso a la época, los archivos que estoy analizando tienen la siguiente estructura de marca de tiempo:

2009-03-08T00:27:31.807 

Como quiero mantener los milisegundos, utilicé el siguiente código ruby ​​para convertirlo al tiempo de época:

 irb(main):010:0> DateTime.parse('2009-03-08T00:27:31.807').strftime("%Q") => "1236472051807" 

Pero en python intenté seguir:

 import time time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807)) 

Pero no recupero la hora original de la fecha,

 >>> time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807)) '41152-03-29 02:50:07' >>> 

Me pregunto si está relacionado con cómo estoy formateando.

Utilice datetime.datetime.fromtimestamp :

 >>> import datetime >>> s = 1236472051807 / 1000.0 >>> datetime.datetime.fromtimestamp(s).strftime('%Y-%m-%d %H:%M:%S.%f') '2009-03-08 09:27:31.807000' 

%f directiva %f solo es compatible con datetime.datetime.strftime , no con time.strftime .

ACTUALIZACIÓN Alternativa usando % , str.format :

 >>> import time >>> s, ms = divmod(1236472051807, 1000) # (1236472051, 807) >>> '%s.%03d' % (time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(s)), ms) '2009-03-08 00:27:31.807' >>> '{}.{:03d}'.format(time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(s)), ms) '2009-03-08 00:27:31.807' 

esos son milisegundos, simplemente divídelos por 1000, ya que gmtime espera segundos …

 time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(1236472051807/1000.0))