[Editado seguindo sugestão nos comentários]
Usando o Ben Alpert's responda a Como posso converter um objeto datetime em milissegundos desde a época (hora do unix) em Python podemos fazer o seguinte:
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)
retorna:
1435371005653
que é equivalente a:Sáb, 27 de junho de 2015 02:10:05 GMT (como esperado)
Também podemos usar o
.strftime('%s')
do datetime para obter o tempo unix, mesmo milissegundos usando o seguinte (mas isso não é recomendado ):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)
retorna:
1435396205653
equivalente a:Sáb, 27 de junho de 2015 09:10:05 GMT (no meu mac em San Diego; Observação :são 7 horas de desconto do que esperávamos).
A causa do erro é descrita por J.F. Sebastian nos comentários do link acima e em neste resposta sobre
.strftime('%s')
comportamento. J.F. Sebastian aponta que "não é suportado, não é portátil, pode produzir silenciosamente um resultado errado para um objeto datetime ciente, falha se a entrada estiver em UTC (como na pergunta), mas o fuso horário local não for UTC"