2012-08-25 63 views
14

Tôi đang làm việc trên một chương trình đơn giản để nói cho một cá nhân họ đã sống được bao lâu.Trừ Ngày với Python

Tôi biết cách lấy ngày hiện tại và nhận ngày sinh của họ. Vấn đề duy nhất là tôi không có cách nào để trừ hai, tôi biết cách trừ hai ngày, nhưng tiếc là nó không bao gồm giờ, phút hoặc giây.

Tôi đang tìm một phương pháp có thể trừ hai ngày và trả lại sự khác biệt xuống ngày thứ hai, không chỉ đơn thuần là ngày.

+0

liên quan: [Tìm nếu 24 giờ đã trôi qua giữa datetimes - Python] (https://stackoverflow.com/q/26313520/4279) – jfs

Trả lời

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

không sử dụng theo giờ địa phương ('datetime.now()'). ['Sử dụng datetime.utcnow()'] (http://stackoverflow.com/a/12126443/4279). – jfs

4

Tạo một datetime.datetime kể từ ngày bạn:

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

Bây giờ bạn có thể trừ nó từ 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

Khi trừ đi hai datettime đối tượng bạn sẽ nhận được một đối tượng datettime.timedelta.

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

Nó sẽ cung cấp cho bạn sự khác biệt về thời gian với độ phân giải đối với microsencod.

Để biết thêm thông tin hãy nhìn vào các official documentation

+0

Điều đó sẽ không tính tổng số chênh lệch tính bằng giây (số giây tối đa tính theo số giây trong một ngày) –

5

Sử dụng UTC thời gian khác tuổi chỉ trong vài giây có thể đi ngược trong DST chuyển:

from datetime import datetime 

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

Bạn cũng không thể sử dụng theo giờ địa phương nếu chương trình của bạn chạy trên máy tính ở một nơi khác (múi giờ) từ nơi một người được sinh ra hoặc nếu quy tắc thời gian đã thay đổi ở nơi này kể từ ngày sinh nhật. Nó có thể giới thiệu vài giờ lỗi.

Nếu bạn muốn tính đến giây nhảy vọt thì nhiệm vụ trở nên gần như không thể.

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

print(age.total_seconds()) 

Output: 463363200,0