sql >> Base de Datos >  >> RDS >> Mysql

Conversión de la cadena Python DateTime en milisegundos enteros

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