2012-08-25 22 views
14

私は、どれだけ長く生きているかを個人に伝える簡単なプログラムに取り組んでいます。Pythonで日付を差し引く

私は現在の日付を取得し、誕生日を取得する方法を知っています。唯一の問題は、2つの日付を減算する方法を知っていますが、残念ながら時間、分、秒は含まれていません。

私は2つの日付を差し引いて差を2番目の日に戻すことができる方法を探しています。

+0

関連:[24時間は、日付時刻との間を通過してきた場合の検索 - パイソン](https://stackoverflow.com/q/26313520/4279) – jfs

答えて

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

をローカル時間を使用しないでください( 'datetime.now()')です。 ['Use datetime.utcnow()']](http://stackoverflow.com/a/12126443/4279)。 – jfs

4

あなたの日からdatetime.datetimeを作成します。

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

今、あなたはdatetime.datetime.now()からそれを引くことができます。 2つのdatettimeオブジェクトをsubstractingとき

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

あなたはdatettime.timedeltaオブジェクトを取得します。

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

これは、マイクロエンコーダーの解像度との時間差を示します。詳細については

そう秒で年齢はDSTの移行の間に逆方向に行くことができますofficial documentation

+0

これは、差の合計を秒単位で計算しません(1日の秒数で最大秒数) –

5

使用UTC時刻を見てみましょう:

from datetime import datetime 

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

あなたのプログラムが実行される場合は、ローカルタイムを使用することはできません人が生まれた場所とは異なる場所(タイムゾーン)にあるコンピュータで、または誕生日以来この場所で時間の規則が変更されていた場合に発生します。数時間のエラーが発生することがあります。

閏秒を考慮する場合、タスクはほとんど不可能になります。

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

print(age.total_seconds()) 

出力:463363200.0