Si encuentras algún problema con tu código o proyecto, recuerda probar siempre en un ambiente de testing antes subir el código al trabajo final.
Solución:
Los objetos de fecha y hora tienen un campo llamado microsecond
. Entonces, una forma de lograr lo que necesita es:
time.mktime(then.timetuple())*1e3 + then.microsecond/1e3
Esto devuelve milisegundos desde la época de UNIX con la precisión requerida.
En Python 3.3 y superior, que admiten la datetime.timestamp()
método, puede hacer esto:
from datetime import datetime, timezone, timedelta
(datetime.now(timezone.utc) + timedelta(days=3)).timestamp() * 1e3
El día es siempre 86400
segundos en tiempo POSIX. Para obtener la marca de tiempo POSIX 3 días en el futuro como un flotante (con una fracción de segundo):
import time
DAY = 86400 # seconds
future = time.time() + 3 * DAY
Asume que time.gmtime(0)
es 1970 (POSIX Epoch).
Si ya tiene un objeto de fecha y hora ingenuo que representa la hora en la zona horaria local, la marca de tiempo puede ser ambigua durante las transiciones de DST. Para evitar la ambigüedad, puede utilizar un objeto de fecha y hora que tenga en cuenta la zona horaria o un objeto de fecha y hora ingenuo que represente la hora en UTC.
Para convertir una fecha y hora local dt
a segundos desde la Época:
from datetime import datetime
from time import mktime
timestamp = dt.timestamp() # Python 3.3+
timestamp = mktime(dt.timetuple()) + dt.microsecond / 1e6 # Python 2.7
Puede fallar si la zona horaria local tuvo un desplazamiento utc diferente en el pasado y el time
la implementación no tiene acceso a la base de datos de la zona horaria en el sistema. Usar pytz
para manejar tales casos.
Para convertir la fecha y hora UTC utc_dt
a la marca de tiempo POSIX:
timestamp = (utc_dt - datetime(1970, 1, 1)).total_seconds()
Para obtener milisegundos, simplemente multiplique el número de segundos flotantes por 1e3.