복붙노트

[PYTHON] 현재 시간이 Python의 datetime 모듈을 사용하여 지정된 범위 내에 있는지 어떻게 알 수 있습니까?

PYTHON

현재 시간이 Python의 datetime 모듈을 사용하여 지정된 범위 내에 있는지 어떻게 알 수 있습니까?

오전 10시 30 분에서 오후 4시 30 분 사이에 현재 시간이 있는지를 확인하는 가장 좋은 방법은 무엇입니까?

나는 다음을 생각할 수있다. 얼마나 정확한지 모르겠다.

from datetime import datetime
nw = datetime.now()
hrs = nw.hour;mins = nw.minute;secs = nw.second;
zero = timedelta(seconds = secs+mins*60+hrs*3600)
st = nw - zero # this take me to 0 hours. 
time1 = st + timedelta(seconds=10*3600+30*60) # this gives 10:30 AM
time2 = st + timedelta(seconds=16*3600+30*60)  # this gives 4:30 PM
if nw>= time1 or nw <= time2:
    print "yes, within the interval"

이 올바른 접근 방식, 더 나은 무언가를 쓸 수 있는지 알려 주시기 바랍니다?

해결법

  1. ==============================

    1.저의 원래 대답은 제기 된 질문에 매우 집중하여 자정에 걸쳐있는 시간 범위를 수용하지 않았습니다. 6 년 후 여전히 이것이 대답으로 받아 들여지 기 때문에 아래에 @ ruble의 답변을 포함 시켰습니다. 그 대답은 자정을 지원하기 위해 확장되었습니다.

    저의 원래 대답은 제기 된 질문에 매우 집중하여 자정에 걸쳐있는 시간 범위를 수용하지 않았습니다. 6 년 후 여전히 이것이 대답으로 받아 들여지 기 때문에 아래에 @ ruble의 답변을 포함 시켰습니다. 그 대답은 자정을 지원하기 위해 확장되었습니다.

    from datetime import datetime, time
    
    def is_time_between(begin_time, end_time, check_time=None):
        # If check time is not given, default to current UTC time
        check_time = check_time or datetime.utcnow().time()
        if begin_time < end_time:
            return check_time >= begin_time and check_time <= end_time
        else: # crosses midnight
            return check_time >= begin_time or check_time <= end_time
    
    # Original test case from OP
    is_time_between(time(10,30), time(16,30))
    
    # Test case when range crosses midnight
    is_time_between(time(22,0), time(4,00))
    

    나는 여전히이 논리의 대부분의 응용 프로그램이 자정 건너기가 날짜 변경으로 반영되는 datetime 객체에 더 적합 할 것임을 아래의 원래 주석에 충실합니다.

  2. ==============================

    2.허용 된 솔루션이 야간에 작동하지 않습니다.

    허용 된 솔루션이 야간에 작동하지 않습니다.

    def isNowInTimePeriod(startTime, endTime, nowTime):
        if startTime < endTime:
            return nowTime >= startTime and nowTime <= endTime
        else: #Over midnight
            return nowTime >= startTime or nowTime <= endTime
    
  3. ==============================

    3.여기 @ 루블의 대답에 대한 작은 예제입니다 :

    여기 @ 루블의 대답에 대한 작은 예제입니다 :

    from datetime import datetime
    
    def isNowInTimePeriod(startTime, endTime, nowTime):
        if startTime < endTime:
            return nowTime >= startTime and nowTime <= endTime
        else: #Over midnight
            return nowTime >= startTime or nowTime <= endTime
    
    
    timeStart = '3:00PM'
    timeEnd = '11:00AM'
    timeNow = '2:59AM'
    timeEnd = datetime.strptime(timeEnd, "%I:%M%p")
    timeStart = datetime.strptime(timeStart, "%I:%M%p")
    timeNow = datetime.strptime(timeNow, "%I:%M%p")
    
    print(isNowInTimePeriod(timeStart, timeEnd, timeNow))
    
  4. ==============================

    4.Py-time-between 패키지를 살펴보십시오. https://pypi.org/project/py-time-between/

    Py-time-between 패키지를 살펴보십시오. https://pypi.org/project/py-time-between/

    테스트 케이스 :

    from datetime import time
    from timebetween import is_time_between
    
    
    def test_is_time_between():
        t, s, e = time(0), time(0), time(0)
        assert is_time_between(t, s, e)
    
        t, s, e = time(0, 0, 0, 1), time(0), time(0, 0, 0, 2)
        assert is_time_between(t, s, e)
    
        t, s, e = time(0, 0, 0, 1), time(0, 0, 0, 1), time(0, 0, 0, 2)
        assert is_time_between(t, s, e)
    
        t, s, e = time(0, 0, 0, 2), time(0, 0, 0, 1), time(0, 0, 0, 2)
        assert is_time_between(t, s, e)
    
        t, s, e = time(0, 0, 1), time(23, 59, 59), time(0, 0, 2)
        assert is_time_between(t, s, e)
    
        t, s, e = time(12, 0, 0), time(23, 59, 59), time(0, 0, 0)
        assert is_time_between(t, s, e)
    
        t, s, e = time(23, 59, 57), time(23, 59, 59), time(23, 59, 57)
        assert is_time_between(t, s, e)
    
        t, s, e = time(23, 59, 58), time(23, 59, 59), time(23, 59, 57)
        assert not is_time_between(t, s, e)
    
        t, s, e = time(22), time(22), time(5, 59, 59)
        assert is_time_between(t, s, e)
    
  5. from https://stackoverflow.com/questions/10048249/how-do-i-determine-if-current-time-is-within-a-specified-range-using-pythons-da by cc-by-sa and MIT license