Restar fechas con Python

Estoy trabajando en un progtwig simple para decirle a una persona cuánto tiempo han estado vivos.

Sé cómo obtener la fecha actual y su cumpleaños. El único problema es que no tengo forma de restar los dos, conozco una forma de restar dos fechas, pero desafortunadamente no incluye horas, minutos o segundos.

Estoy buscando un método que pueda restar dos fechas y devolver la diferencia al segundo, no solo el día.

from datetime import datetime birthday = datetime(1988, 2, 19, 12, 0, 0) diff = datetime.now() - birthday print diff # 8954 days, 7:03:45.765329 

Use la hora UTC, de lo contrario, la edad en segundos puede retroceder durante la transición de horario de verano:

 from datetime import datetime born = datetime(1981, 12, 2) # provide UTC time age = datetime.utcnow() - born print(age.total_seconds()) 

Tampoco puede usar la hora local si su progtwig se ejecuta en una computadora que se encuentra en un lugar diferente (zona horaria) de donde nació una persona o si las reglas de tiempo han cambiado en este lugar desde su cumpleaños. Podría introducir varias horas de error.

Si desea tener en cuenta los segundos de salto, la tarea se vuelve casi imposible.

Al datettime dos objetos datettime obtendrá un objeto datettime.timedelta .

 from datettime import datetime x = datetime.now() y = datetime.now() delta = y - x 

Le dará la diferencia de tiempo con la resolución de microsencods.

Para más información echar un vistazo a la documentación oficial.

Cree un datetime.datetime partir de su fecha:

 datetime.datetime.combine(birthdate, datetime.time()) 

Ahora puede restarlo de datetime.datetime.now() .

 >>> from datetime import date, datetime, time >>> bday = date(1973, 4, 1) >>> datetime.now() - datetime.combine(bday, time()) datetime.timedelta(14392, 4021, 789383) >>> print datetime.now() - datetime.combine(bday, time()) 14392 days, 1:08:13.593813 
 import datetime born = datetime.date(2002, 10, 31) today = datetime.date.today() age = today - born print(age.total_seconds()) 

Salida: 463363200.0