web-dev-qa-db-ja.com

2つの日付の差を秒単位で確認するにはどうすればよいですか?

これを行うには簡単な方法が必要です。時々更新したいオブジェクトがあるので、それらが作成されたときを記録し、現在のタイムスタンプと照合して、必要に応じて更新したいです。

datetime.datetimeは難しいことが証明されており、ctimeライブラリに飛び込みたくありません。この種のものにもっと簡単なものはありますか?

144
Alex

2つの既知の日付の差を計算する場合は、次のようにtotal_secondsを使用します。

import datetime as dt

a = dt.datetime(2013,12,30,23,59,59)
b = dt.datetime(2013,12,31,23,59,59)

(b-a).total_seconds()

86400.0

#note that seconds doesn't give you what you want:
(b-a).seconds

412
Rich Signell
import time  
current = time.time()

...job...
end = time.time()
diff = end - current

それはあなたのために働くでしょうか?

29
matcheek
>>> from datetime import datetime

>>>  a = datetime.now()

# wait a bit 
>>> b = datetime.now()

>>> d = b - a # yields a timedelta object
>>> d.seconds
7

(7は、少し上で待機した時間になります)

Datetime.datetimeは非常に有用であると思いますので、複雑なまたは厄介なシナリオに遭遇した場合はお知らせください。

編集:日時が近くなるほど頻繁に更新する必要があるとは限らないことを指摘してくれた@WoLpHに感謝します。デルタの日数を計算することにより、より長いタイムスタンプの不一致を処理できます。

>>> a = datetime(2010, 12, 5)
>>> b = datetime(2010, 12, 7)
>>> d = b - a
>>> d.seconds
0
>>> d.days
2
>>> d.seconds + d.days * 86400
172800
14
Jarret Hardie

Python 2.7の関数total_seconds()があります。以下のpython 2.6のコードをご覧ください。

import datetime
import time  

def diffdates(d1, d2):
    #Date format: %Y-%m-%d %H:%M:%S
    return (time.mktime(time.strptime(d2,"%Y-%m-%d %H:%M:%S")) -
               time.mktime(time.strptime(d1, "%Y-%m-%d %H:%M:%S")))

d1 = datetime.now()
d2 = datetime.now() + timedelta(days=1)
diff = diffdates(d1, d2)
12
Prashant Gaur

ここに私のために働いているものがあります。

from datetime import datetime

date_format = "%H:%M:%S"

# You could also pass datetime.time object in this part and convert it to string.
time_start = str('09:00:00') 
time_end = str('18:00:00')

# Then get the difference here.    
diff = datetime.strptime(time_end, date_format) - datetime.strptime(time_start, date_format)

# Get the time in hours i.e. 9.60, 8.5
result = diff.seconds / 3600;

お役に立てれば!

0
therealadrain