[Editado siguiente sugerencia en los comentarios]
Usando Ben Alpert responda a ¿Cómo puedo convertir un objeto de fecha y hora en milisegundos desde la época (hora de Unix) en Python podemos hacer lo siguiente:
from datetime import datetime
def unix_time(dt):
epoch = datetime.utcfromtimestamp(0)
delta = dt - epoch
return delta.total_seconds()
def unix_time_millis(dt):
return int(unix_time(dt) * 1000)
a = datetime.strptime("2015-06-27T02:10:05.653000Z", "%Y-%m-%dT%H:%M:%S.%fZ")
unix_time_millis(a)
devuelve:
1435371005653
que equivale a:sábado, 27 de junio de 2015 02:10:05 GMT (como se esperaba)
También podemos usar .strftime('%s')
de datetime para obtener el tiempo de Unix, incluso milisegundos usando lo siguiente (pero esto no se recomienda ):
from decimal import Decimal
int(Decimal(datetime.strptime("2015-06-27T02:10:05.653000Z", "%Y-%m-%dT%H:%M:%S.%fZ").strftime('%s.%f'))*1000)
devuelve:
1435396205653
equivalente a:sábado, 27 de junio de 2015 09:10:05 GMT (en mi mac en San Diego; Nota :esto es 7 horas menos de lo que esperábamos).
La causa del error la describe J.F. Sebastian en los comentarios del enlace anterior y en este respuesta sobre .strftime('%s')
comportamiento. JF Sebastian señala que "no es compatible, no es portátil, puede producir silenciosamente un resultado incorrecto para un objeto de fecha y hora consciente, falla si la entrada está en UTC (como en la pregunta) pero la zona horaria local no es UTC"