2012-08-25 29 views
14

Estoy trabajando en un programa simple para decirle a un individuo cuánto tiempo han estado vivos.Restar fechas con Python

Sé cómo obtener la fecha actual y obtener su fecha de nacimiento. El único problema es que no tengo forma de restar los dos, sé una manera 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.

+0

relacionada: [Find si 24 horas han transcurrido entre datetimes - Python] (https://stackoverflow.com/q/26313520/4279) – jfs

Respuesta

18
from datetime import datetime 

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

no utilizan hora local ('datetime.now()'). ['Use datetime.utcnow()'] (http://stackoverflow.com/a/12126443/4279). – jfs

4

Crear un datetime.datetime partir de la fecha:

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

ya se puede restar 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 
3

Cuando restando dos datettime objetos que conseguirá 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 microsencodos.

Para más información echa un vistazo a la official documentation

+0

Eso no calculará el total de la diferencia en segundos (el número de segundos se maximiza en el número de segundos en un día) –

5

tiempo UTC Uso de lo contrario la edad en cuestión de segundos puede ir hacia atrás durante el horario de verano de transición:

from datetime import datetime 

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

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

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

1
import datetime 
born = datetime.date(2002, 10, 31) 
today = datetime.date.today() 
age = today - born 

print(age.total_seconds()) 

Salida: 463363200,0