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


180

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

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

回答:


516

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

0


95
「ノート」は人々が見逃す最も重要な部分です。私はそれについて別の賛成票を投じることを望みます。
デクスター

見た目が...正しくない結果になることに気づくことがあります。59.800秒(スプリット秒の違い)。したがって、秒、ミリ秒、またはマイクロ秒の差などの小さな操作の場合、使用して(b-a).microsecondsからそれを除算して秒(1000000)またはミリ秒(1000)を取得できます
Zld Productions

aとbを入れ替えても、値は常に正であるように見える
Nickpick

@Nickpick値は常に正であるとは限りません。例えば以下がある-60from datetime import datetime; (datetime(2019, 1, 1, 0, 0) - datetime(2019, 1, 1, 0, 1)).total_seconds()
JDiMatteo

印象的なソリューション!関数を作成するためにクリーンなコードは必要ありません。
Paulo zOiO zuLLuFabrício19年

36
import time  
current = time.time()

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

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


1
+1; どちらの呼び出しの日付も実際には関係ありません。経過時間は関係ありません。したがって、示されているように、生のタイムスタンプを使用します。
Karl Knechtel、2010

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

1
d.seconds + d.days * 86400代わりに戻ってきた場合、それは数日間正しいです;)
Wolph

7
一般的なケースでは、これは正しくないことに注意してください。ケースを検討しa - baある前に b:(すなわち、その結果が負になります)(a - b).seconds == 86282しばらくa - b == datetime.timedelta(-1, 86276, 627665)。正しい方法は、使用することだと私は考えていますtimedelta.total_seconds()。しかし、それはpy2.7 +のみです。
David Wolever、2011

4
実際、答えは正しくなく、@ DavidWoleverコメントを反映する必要があります。正解は次のとおりtimedelta.total_seconds()です。それに応じて反対票を投じた。
astrojuanlu 2013年

3
Python 2.6の回答に賛成。 total_seconds()2.7以降の機能です。
Joe Holloway、

@JoeHolloway Python 2.6でもこれが正しく機能していないと思います。
zen11625

12

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)

0

これが私のために働いているものです。

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;

お役に立てれば!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.