[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.저의 원래 대답은 제기 된 질문에 매우 집중하여 자정에 걸쳐있는 시간 범위를 수용하지 않았습니다. 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.허용 된 솔루션이 야간에 작동하지 않습니다.
허용 된 솔루션이 야간에 작동하지 않습니다.
def isNowInTimePeriod(startTime, endTime, nowTime): if startTime < endTime: return nowTime >= startTime and nowTime <= endTime else: #Over midnight return nowTime >= startTime or nowTime <= endTime
-
==============================
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.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)
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
'PYTHON' 카테고리의 다른 글
[PYTHON] Python에서 안전하지 않은 사용자 입력으로부터 수학 방정식을 평가하십시오. (0) | 2018.11.06 |
---|---|
[PYTHON] argparse 및 python을 사용하여 사전을 인수로 허용 [duplicate] (0) | 2018.11.06 |
[PYTHON] 16 진수를 16 진수로 변환하는 방법 (0) | 2018.11.06 |
[PYTHON] virtualenv Env는 Windows 7에서 bin 디렉토리를 만들지 않습니다. (0) | 2018.11.06 |
[PYTHON] python TestSuite 구현하기 (0) | 2018.11.06 |