2017-09-18 1 views
0

그래서 시작 시간으로 21:00:00 (PM)과 종료 시간으로 03:00:00 (AM)과 같은 두 개의 timedelta 값이 있고이 범위 내에서 23:00:00을 비교하고 싶습니다. 이 둘 사이에 날짜 값이 없는지 여부에 관계없이 어떻게 할 수 있습니까? 이 예에서이 21:00:00보다 23:00:00 큰 볼 수 있지만 시간 델타 값이 자정 넘은 범위에 있는지 확인

그래서 내 문제가있는 03:00:00보다 23:00:00 덜 볼 수 없습니다. timedelta를 사용하는 24 시간의 원에서 시간을 비교할 수 있어야하며 timedelta에서 멀리 떨어진 곳으로 전환하는 것이 좋습니다.

참고 : 시작/종료 시간 범위가 변경되어 AM/PM이 될 수 있습니다. 그래서 저는 예를 들어 끝나는 시간에 하루를 더할 수 없습니다.

+0

diff (23, 21)가 diff (23, 3)보다 작은 지 확인하십시오. –

+0

종료 시간은 시작 시간보다 24 시간 이내에 보장됩니까? 그렇지 않으면 복잡해질 수 있습니다. 시작 시간이 월요일 오후 11시이며 종료 시간이 오전 3시에 수요일이면 화요일 오전 11시에 대해 이야기하는 한 임의의 시간이 오전 11 시라고 말합니다. 이것이 가능하다면 시작과 끝 시간 이상의 것을 필요로 할 것입니다. –

+0

@DavidJenkins 예, 항상 24 시간 내에 만 제공됩니다. 따라서 임의의 시간 즉 오후 3시를 선택했지만 변경 사항이 적용되는 범위는 오전 6 시부 터 오후 12 시까지만 말하는 경우 범위 내에 있지 않아야합니다. – sgript

답변

0

절대 시간은 datetime.timedelta 대신 datetime.time을 사용하는 것이 좋습니다. 그럼에도 불구하고 여기에는 귀하의 기존 상황을 고려하여 효과가 있어야 할 부분이 있습니다.

def is_in_time_range(start, end, time): 
    if end < start: 
     return start < time or end > time 
    return start < time < end 


from datetime import timedelta 

>>> is_in_time_range(timedelta(hours=21), timedelta(hours=3), timedelta(hours=23)) 
True 
>>> is_in_time_range(timedelta(hours=21), timedelta(hours=3), timedelta(hours=4)) 
False 
>>> is_in_time_range(timedelta(hours=21), timedelta(hours=3), timedelta(hours=2)) 
True 

당신이 내가 제시 한 대신으로 datetime.time을 사용하기로 결정한 경우,이 솔루션은 여전히 ​​작동 :

from datetime import time 
>>> is_in_time_range(time(hour=21), time(hour=3), time(hour=23)) 
True 
>>> is_in_time_range(time(hour=21), time(hour=3), time(hour=4)) 
False 
>>> is_in_time_range(time(hour=21), time(hour=3), time(hour=2)) 
True 
0

그것은된다 "어렵다"단지는 endtime STARTTIME보다 작은 경우 (IE, 다음 날) . 그러나이 경우 시험을 치르면 세 항목 모두에 12 시간을 추가 할 수 있으므로 이제는 오전 9시에서 오후 3시 사이에 오전 11 시가 쉽게 테스트 및 확인할 수 있습니다.