파이썬에서 시간을 비교하는 방법?


105

날짜 비교가 가능하다는 것을 알았습니다 datetime.timedelta().하지만 현재 시간 ( datetime.datetime.now())이 날짜에 관계없이 지정된 시간 (예 : 오전 8시)보다 빠르거나 늦거나 같은지 확인하는 방법을 찾는 데 어려움을 겪고 있습니다.


1
나는 이것을 대답으로 넣는 것에 대해 확신하지 못하지만 여기에 주석으로 넣었습니다. 놀랍게도 파이썬은 두 값 사이 에서하는 것처럼 '23:23:00' > '23:59:00'또는 같은 비교를 허용한다는 것을 발견했습니다 . 시간을 비교하는 가장 좋은 방법입니까? 모르겠어요. 작동합니까? 내가 테스트하는 한 잘 작동했습니다. 그러나 확실히 (그리고 물론) : 월, 평일이있는 datetime 문자열과 함께 이것을 사용할 기회는 없습니다. '23:23:00' > '23:09:22'datetime.datetime.now().strftime('%H:%M')
ivanleoncz

답변:


138

당신은 할 수 없습니다 (오전 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är Wieslander의 답변에 대한 수락을 뒤집고 싶을 수 있습니다 (일반적으로 당신이 한 것보다 몇 분 더 기다려야합니다 : P).

69

당신이 사용할 수있는 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-08-13

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

5

Roger Pate의 영감 :

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을 사용해야합니다.



2

시간 증가 비교를 위해 Timedelta 기능을 사용할 수 있습니다.

>>> import datetime 

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

False

이 답변의 조합은 이것Roger


1

datetime에는 비교 기능이 있습니다.

>>> import datetime
>>> import time
>>> a =  datetime.datetime.now()
>>> time.sleep(2.0)
>>> b =  datetime.datetime.now()
>>> print a < b
True
>>> print a == b
False
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.