¿Cómo se obtiene la diferencia entre dos objetos de tiempo en Python?

Tengo dos objetos datetime.time en Python, por ejemplo,

>>> x = datetime.time(9,30,30,0) >>> y = datetime.time(9,30,31,100000) 

Sin embargo, cuando hago (yx) como lo haría para el objeto datetime.datetime, obtuve el siguiente error:

 Traceback (most recent call last): File "", line 1, in  yx TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time' 

Necesito obtener el valor yx en microsegundos, es decir, en este caso debería ser 1100000. ¿Alguna idea?

La clase datetime.time no admite la resta de objetos por la misma razón por la que no admite la comparación de objetos, es decir, porque sus objetos podrían no definir su atributo tzinfo :

comparación de tiempo a tiempo, donde a se considera menor que b cuando a precede a b en el tiempo. Si un comparando es ingenuo y el otro es consciente, se genera TypeError. Si ambos comparandos son conscientes y tienen el mismo atributo tzinfo, el atributo tzinfo común se ignora y se comparan los tiempos base. Si ambos comparandos son conscientes y tienen atributos tzinfo diferentes, los comparandos se ajustan primero restando sus compensaciones UTC (obtenidas de self.utcoffset ()). Para evitar que las comparaciones de tipo mixto vuelvan a la comparación predeterminada por dirección de objeto, cuando un objeto de tiempo se compara con un objeto de un tipo diferente, TypeError se genera a menos que la comparación sea == o! =. Los últimos casos devuelven Falso o Verdadero, respectivamente.

Debe usar datetime.datetime que incluye tanto la fecha como la hora.

Si las dos horas se refieren a un solo día, puede decirle a python que la fecha es hoy, con date.today() y combinar la fecha con la hora usando datetime.combine .

Ahora que tiene tiempos de datos que puede realizar una resta, esto devolverá una instancia de datetime.timedelta , en la que el método total_seconds() devolverá el número de segundos (es un valor float que incluye la información de microsegundos). Así que multiplica por 10 6 y obtendrás los microsegundos.

 from datetime import datetime, date, time x = time(9, 30, 30, 0) y = time(9, 30, 31, 100000) diff = datetime.combine(date.today(), y) - datetime.combine(date.today(), x) print diff.total_seconds() * (10 ** 6) # 1100000.0 

También puedes usar timedeltas:

 from datetime import timedelta x = timedelta(hours=9, minutes=30, seconds=30) y = timedelta(hours=9, minutes=30, seconds=31, microseconds=100000) print (y - x).total_seconds() * (10 ** 6) # 1100000.0