Saltar al contenido

Convertir timedelta a segundos totales

Presta atención porque en esta noticia vas a hallar la contestación que buscas.

Solución:

Utilizar timedelta.total_seconds().

>>> import datetime
>>> datetime.timedelta(seconds=24*60*60).total_seconds()
86400.0

Tienes un problema de una forma u otra con tu datetime.datetime.fromtimestamp(time.mktime(time.gmtime())) expresión.

(1) Si todo lo que necesitas es la diferencia entre dos instantes en segundos, la muy simple time.time() hace el trabajo.

(2) Si está utilizando esas marcas de tiempo para otros fines, debe considerar lo que está haciendo, porque el resultado tiene un gran olor por todas partes:

gmtime() devuelve una tupla de tiempo en UTC pero mktime() espera una tupla de tiempo en hora local.

Estoy en Melbourne, Australia, donde la TZ estándar es UTC+10, pero el horario de verano sigue vigente hasta mañana por la mañana, por lo que es UTC+11. Cuando ejecuté lo siguiente, era 2011-04-02T20:31 hora local aquí… UTC era 2011-04-02T09:31

>>> import time, datetime
>>> t1 = time.gmtime()
>>> t2 = time.mktime(t1)
>>> t3 = datetime.datetime.fromtimestamp(t2)
>>> print t0
1301735358.78
>>> print t1
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=9, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=0) ### this is UTC
>>> print t2
1301700663.0
>>> print t3
2011-04-02 10:31:03 ### this is UTC+1
>>> tt = time.time(); print tt
1301736663.88
>>> print datetime.datetime.now()
2011-04-02 20:31:03.882000 ### UTC+11, my local time
>>> print datetime.datetime(1970,1,1) + datetime.timedelta(seconds=tt)
2011-04-02 09:31:03.880000 ### UTC
>>> print time.localtime()
time.struct_time(tm_year=2011, tm_mon=4, tm_mday=2, tm_hour=20, tm_min=31, tm_sec=3, tm_wday=5, tm_yday=92, tm_isdst=1) ### UTC+11, my local time

Notará que t3, el resultado de su expresión es UTC+1, que parece ser UTC + (mi diferencia de DST local)… no muy significativa. Deberías considerar usar datetime.datetime.utcnow() que no saltará una hora cuando el horario de verano se active o desactive y puede brindarle más precisión que time.time()

Comentarios y puntuaciones

Puedes añadir valor a nuestra información colaborando tu experiencia en las interpretaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *