Calcular la fecha hora diferencia python

Estoy escribiendo la función timediff para calcular la diferencia de tiempo (segundos) entre 2 y la fecha y la hora.

def timediff(time1, time2): timeformat = '%d%b%Y:%H:%M:%S' #time1="01MAR2016:07:11:53" #time2="01MAR2016:16:28:38" try: date_object1 = datetime.strptime(time1, timeformat) date_object2 = datetime.strptime(time2, timeformat) except ValueError: print "time1 format: " + repr(time1) print "time2 format: " + repr(time2) raise return abs((date_object2 - date_object1).seconds) 

Parece que no toma el “mes, fecha, año” para el cálculo. Da el cálculo correcto si está en el mismo “mes, fecha, año”

 >>> t1="01MAR2016:07:11:53" >>> t2="01MAR2016:16:28:38" >>> timediff(t1, t2) 33405 

Sin embargo, con diferentes “mes, fecha, año”, da la respuesta incorrecta. Esto solo calcula la diferencia de tiempo ~ 18hrs (lo que da ~ 65k segundos)

 >>> t1="02APR2016:06:43:51" >>> t2="06APR2016:00:58:03" >>> timediff(t1, t2) 65652 

O 24hrs diferente da 0.

 >>> t1="01MAR2016:07:11:53" >>> t2="02MAR2016:07:11:53" >>> timediff(t1, t2) 0 

La fecha y hora toma el formato de tiempo que doy.

 >>> t1="01MAR2016:07:11:53" >>> t2="02MAR2016:07:11:53" >>> datetime.strptime(t1, timeformat) datetime.datetime(2016, 3, 1, 7, 11, 53) >>> datetime.strptime(t2, timeformat) datetime.datetime(2016, 3, 2, 7, 11, 53) 

¿Me estoy perdiendo algo?

Tengo otra alternativa que convierte la fecha en segundos. Pero todavía quiero saber por qué este método no funciona.

Mi alternativa

 def timediff(time1, time2): timeformat = '%d%b%Y:%H:%M:%S' t1 = datetime.strptime(time1, timeformat) t2 = datetime.strptime(time2, timeformat) return abs(time.mktime(t1.timetuple()) - time.mktime(t2.timetuple())) 

Ejemplo:

 >>> t2 '02MAR2016:07:11:53' >>> t1 '01MAR2016:07:11:53' >>> timediff(t1,t2) 86400.0 

Necesitas usar total_seconds() y no seconds :

 >>> import datetime >>> f = '%d%b%Y:%H:%M:%S' >>> t1 = '01MAR2016:07:11:53' >>> t2 = '02MAR2016:07:11:53' >>> d1 = datetime.datetime.strptime(t1, f) >>> d2 = datetime.datetime.strptime(t2, f) >>> print(d2-d1) 1 day, 0:00:00 >>> print((d2-d1).total_seconds()) 86400.0 >>> print((d2-d1).seconds) 0