日付の比較が可能でありdatetime.timedelta()
、datetime.datetime.now()
もありますが、日付に関係なく、現在の時刻()が指定された時刻(たとえば、午前8時)よりも早い、遅い、または同じであるかどうかを確認する方法を見つけるのに苦労しています。
回答:
特定の時点(「今」など)を、修正されていない定期的なイベント(毎日午前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
オブジェクトの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
datetime.datetime.now().time()
、中括弧を忘れないでくださいnow()
!
ロジャー・ペイトに触発されました:
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"
依存関係を追加したり、datetimeを使用したりせずにこれを行う別の方法は、時間オブジェクトの属性に対していくつかの計算を行うことです。時間、分、秒、ミリ秒、およびタイムゾーンがあります。非常に単純な比較では、時間と分で十分です。
d = datetime.utcnow()
t = d.time()
print t.hour,t.minute,t.second
信じられないほど単純なユースケースがない限り、これを行うことはお勧めしません。タイムゾーンの認識または日付の認識が必要な場合は、datetimeを使用する必要があります。
驚いたことに、ここでこの1つのライナーを見たことがありません。
datetime.datetime.now().hour == 8
'23:23:00' > '23:59:00'
orのような比較を受け入れることがわかりました。それは時代間の比較を達成するための最良の方法ですか?知りません。うまくいきますか?私がテストした限りでは、それはうまくいきました。しかし、間違いなく(そしてもちろん)、月、平日があるdatetime文字列でこれを使用する機会はありません。'23:23:00' > '23:09:22'
datetime.datetime.now().strftime('%H:%M')