Convertir timedelta a segundos totales

Resuelto ripper234 asked hace 13 años • 6 respuestas

tengo una diferencia horaria

import time
import datetime

time1 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
...
time2 = datetime.datetime.fromtimestamp(time.mktime(time.gmtime()))
diff = time2 - time1

Ahora, ¿cómo encuentro el número total de segundos que pasaron? diff.secondsno cuenta los días. Yo podría hacer:

diff.seconds + diff.days * 24 * 3600

¿Existe algún método integrado para esto?

ripper234 avatar Apr 02 '11 15:04 ripper234
Aceptado

Usar timedelta.total_seconds().

>>> import datetime
>>> datetime.timedelta(seconds=24*60*60).total_seconds()
86400.0
 avatar Apr 02 '2011 08:04

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, lo muy simple time.time()funciona.

(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 el 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ás que t3, el resultado de tu expresión es UTC+1, que parece ser UTC + (mi diferencia de horario de verano local)... no es muy significativo. Debería considerar usar datetime.datetime.utcnow()el cual no saltará una hora cuando el horario de verano se active o desactive y puede brindarle más precisión quetime.time()

John Machin avatar Apr 02 '2011 09:04 John Machin

A continuación se muestra una forma más compacta de obtener la diferencia entre dos objetos de fecha y hora y luego convertir la diferencia en segundos (Python 3x):

from datetime import datetime
        
time1 = datetime.strftime('18 01 2021', '%d %m %Y')
    
time2 = datetime.strftime('19 01 2021', '%d %m %Y')

difference = time2 - time1

difference_in_seconds = difference.total_seconds()
Atif Bashir avatar Jan 19 '2021 13:01 Atif Bashir