Pythonで時間を比較する方法は?


98

日付の比較が可能でありdatetime.timedelta()datetime.datetime.now()もありますが、日付に関係なく、現在の時刻()が指定された時刻(たとえば、午前8時)よりも早い、遅い、または同じであるかどうかを確認する方法を見つけるのに苦労しています。


1
これを答えとして入れるかどうかはわかりませんが、コメントとしてここに入れます。驚くことに、2つの値の間で行うのと同じように、Pythonは'23:23:00' > '23:59:00'orのような比較を受け入れることがわかりました。それは時代間の比較を達成するための最良の方法ですか?知りません。うまくいきますか?私がテストした限りでは、それはうまくいきました。しかし、間違いなく(そしてもちろん)、月、平日があるdatetime文字列でこれを使用する機会はありません。'23:23:00' > '23:09:22'datetime.datetime.now().strftime('%H:%M')
ivanleoncz

回答:


128

特定の時点(「今」など)を、修正されていない定期的なイベント(毎日午前8時に発生)と比較することはできません

今の前か後にあるかどうかをチェックすることができ、今日の午前8時:

>>> import datetime
>>> now = datetime.datetime.now()
>>> today8am = now.replace(hour=8, minute=0, second=0, microsecond=0)
>>> now < today8am
True
>>> now == today8am
False
>>> now > today8am
False

4
受け入れた内容をPärWieslanderの回答に戻すことをお勧めします(通常は、Pよりも数分待つ必要があります:P)。これは、要求した内容に少し限定されるためです。

65

オブジェクトのtime()メソッドを使用しdatetimeて時刻を取得でき、日付を考慮せずに比較に使用できます。

>>> this_morning = datetime.datetime(2009, 12, 2, 9, 30)
>>> last_night = datetime.datetime(2009, 12, 1, 20, 0)
>>> this_morning.time() < last_night.time()
True

2
行うようにしてくださいdatetime.datetime.now().time()、中括弧を忘れないでくださいnow()
Jose Salvatierra 2013

10

datetime.datetimeオブジェクトを直接比較できます

例えば:

>>> a
datetime.datetime(2009, 12, 2, 10, 24, 34, 198130)
>>> b
datetime.datetime(2009, 12, 2, 10, 24, 36, 910128)
>>> a < b
True
>>> a > b
False
>>> a == a
True
>>> b == b
True
>>> 

4

ロジャー・ペイトに触発されました:

import datetime
def todayAt (hr, min=0, sec=0, micros=0):
   now = datetime.datetime.now()
   return now.replace(hour=hr, minute=min, second=sec, microsecond=micros)    

# Usage demo1:
print todayAt (17), todayAt (17, 15)

# Usage demo2:    
timeNow = datetime.datetime.now()
if timeNow < todayAt (13):
   print "Too Early"

2

依存関係を追加したり、datetimeを使用したりせずにこれを行う別の方法は、時間オブジェクトの属性に対していくつかの計算を行うことです。時間、分、秒、ミリ秒、およびタイムゾーンがあります。非常に単純な比較では、時間と分で十分です。

d = datetime.utcnow()
t = d.time()
print t.hour,t.minute,t.second

信じられないほど単純なユースケースがない限り、これを行うことはお勧めしません。タイムゾーンの認識または日付の認識が必要な場合は、datetimeを使用する必要があります。


1

日時には比較機能があります

>>> import datetime
>>> import time
>>> a =  datetime.datetime.now()
>>> time.sleep(2.0)
>>> b =  datetime.datetime.now()
>>> print a < b
True
>>> print a == b
False


1

x時間増加の比較にTimedelta機能を使用できます。

>>> import datetime 

>>> now = datetime.datetime.now()
>>> after_10_min = now + datetime.timedelta(minutes = 10)
>>> now > after_10_min 

False

これらの答えの組み合わせだけでこれロジャー

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