Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Conversão da string Python DateTime em milissegundos inteiros


[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"