2012-08-25 22 views
14

Pracuję nad prostym programem, który powie osobnikowi, jak długo żyją.Odejmowanie dat z pytonem

Wiem, jak uzyskać aktualną datę i datę urodzin. Jedyny problem polega na tym, że nie mam możliwości odjęcia tych dwóch, znam sposób odejmowania dwóch dat, ale niestety nie obejmuje on godzin, minut ani sekund.

Szukam metody, która może odjąć dwie daty i zwrócić różnicę do drugiego, a nie tylko do dnia.

+0

pokrewne: [Znajdź jeżeli upłynęło 24 godzin pomiędzy datetimes - Python] (https://stackoverflow.com/q/26313520/4279) – jfs

Odpowiedz

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

nie używaj czasu lokalnego ('datetime.now()'). ['Use datetime.utcnow()'] (http://stackoverflow.com/a/12126443/4279). – jfs

4

Tworzenie datetime.datetime z datą:

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

Teraz można odjąć go od 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

Kiedy odjęcie dwóch datettime przedmiotów dostaniesz datettime.timedelta obiekt.

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

Daje to różnicę czasu z rozdzielczością na mikrosencje.

Aby uzyskać więcej informacji zajrzyj Pod official documentation

+0

To nie obliczy całkowitej różnicy w sekundach (liczba sekund maks. Na sekundę w ciągu dnia) –

5

Zastosowanie UTC czas inaczej wiek w sekundach może się cofnąć w czasie DST przejścia:

from datetime import datetime 

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

Nie można również wykorzystać czas lokalny jeśli biegnie programowe na komputerze znajdującym się w innym miejscu (strefie czasowej), z którego urodziła się osoba lub jeśli reguły czasowe zmieniły się w tym miejscu od urodzin. Może to spowodować błąd kilku godzin.

Jeśli chcesz uwzględnić sekundy przestępne, zadanie staje się prawie niemożliwe.

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

print(age.total_seconds()) 

wyjściowa: 463363200,0