2012-08-25 37 views
14

Bir bireye ne kadar yaşandığını söylemek için basit bir program üzerinde çalışıyorum.Python ile Çıkarma Tarihleri ​​

Güncel tarihi nasıl alacağımı ve doğum günlerini nasıl alacağımı biliyorum. Tek sorun, ikisini çıkarmanın bir yolu yok, iki tarih çıkarmanın bir yolunu biliyorum, ama maalesef saat, dakika veya saniye içermiyor.

İki tarihi ayırabilen ve farkı yalnızca güne değil, ikinci değere geri döndüren bir yöntem arıyorum.

+0

ilgili: [24 saat tarihsaat arasında geçtiyse bul - Python] (https://stackoverflow.com/q/26313520/4279) – jfs

cevap

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

(yerel saat kullanmayın 'datetime.now() '). ['Datetime.utcnow()'] kullanın (http://stackoverflow.com/a/12126443/4279). – jfs

4

tarihinizden itibaren bir datetime.datetime oluşturun:

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

Şimdi datetime.datetime.now() onu çıkarabilirsiniz. İki datettime nesneleri substracting zaman

>>> 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

Bir datettime.timedelta nesneyi alacak.

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

Mikroişlemci çözünürlüklerinde zaman farkı verir. Daha fazla bilgi için

bakmak official documentation

+0

Bu, toplamın saniye cinsinden toplam sayısını hesaplamayacaktır (bir saniyedeki saniye sayısında maksimum saniye sayısı) –

5
saniyede aksi yaş DST geçiş sırasında geriye gidebilir

Kullanım UTC zamanı: program çalışır eğer

from datetime import datetime 

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

Ayrıca yerel saati kullanmayın olamaz Bir insanın doğduğu yerden farklı bir yerde (saat dilimi) bulunan bir bilgisayar üzerinde veya doğumdan bu yana zaman kurallarının değişmesi durumunda. Birkaç saat hata verebilir.

Artık saniyeyi hesaba katmak istiyorsanız, görev neredeyse imkansız hale gelir.

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

print(age.total_seconds()) 

Çıktı: 463363200,0

İlgili konular