Calcula la diferencia entre dos veces en python

Estoy usando python, y quiero calcular la diferencia entre dos veces.

En realidad, tuve un escenario para calcular la diferencia entre los tiempos de inicio y cierre de sesión, por ejemplo, en las organizaciones hay un límite particular para las horas de trabajo, por lo que si un usuario inicia sesión a las 9:00 AM de la mañana y si cierra la sesión a las 6:00 PM por la noche, necesitamos calcular la duración de la estancia en la oficina (que es de 9 hours en el escenario actual), pero quiero hacer esto en Python, así que, por favor, ¿alguien puede hacerme saber cómo lograr el concepto anterior de ¿calculando la diferencia entre los tiempos de inicio y cierre de sesión?

 >>> start = datetime.datetime(year=2012, month=2, day=25, hour=9) >>> end = datetime.datetime(year=2012, month=2, day=25, hour=18) >>> diff = end - start >>> diff datetime.timedelta(0, 32400) >>> diff.total_seconds() 32400 >>> diff.total_seconds() / 60 / 60 9 >>> 

usa divmod para esta tarea

 >>> start = datetime.datetime.utcnow() >>> end = datetime.datetime.utcnow() >>> divmod(end - start, 60) (0, 2.454) # (minutes, seconds) 

divmod dará

En mi opinión, la respuesta de @Fabian es probablemente la mejor. ¿Pero estamos haciendo esto más difícil de lo que tiene que ser?

¿Necesitas calcularlo por día, mes, año?

Si está generando esto, ¿no sería más fácil usar una representación de timesec?

Cuando un usuario inicia sesión en:

 user_login_time = time.time() 

Cuando el usuario vuelve a visitar:

 time_difference = time.time() - user_login_time 

Luego verifica si la diferencia de tiempo es superior a XXXX segundos? ¿Supongo que ahora va a comprobar si el usuario no ha iniciado sesión en XX minutos o xx horas?

De lo contrario, recalcaría que la respuesta de @Fabian sería la mejor, si está analizando las cadenas de fecha de hora de análisis, o si necesita hacer otras funciones de fecha / hora con los datos.

También enfatizaría, que si usa este método, haga constantes para los tiempos, o asegúrese de comentarlos, para hacerlo más legible.

Pero si simplemente está intentando averiguar si el usuario ha estado encendido en los últimos 30 minutos, esto podría ser más fácil.

Estás utilizando las clases equivocadas para representar el tiempo en primer lugar.

 > import datetime > print datetime.datetime.now() - datetime.datetime(2013, 1, 1) 55 days, 14:11:06.749378 

El objeto devuelto es un timedelta . Pero, por supuesto, la diferencia se calcula entre los objetos de datetime .