python 에서 시간 차이 계산하기
python에서는 날짜 및 시간 계산을 위한 datetime 라는 패키지가 준비 되어 있습니다.
이 패키지를 이용해서 시간의 차를 계산하는 방법을 살펴보겠습니다.
시간의 차 계산
보통 문자열로 표현된 시간은 strptime() 함수를 이용해서 datetime calss로 변환합니다.
그리고 해당 시간을 빼주면 됩니다.
def time_diff(start_t, end_t, t_format='%H:%M:%S'): # https://docs.python.org/ko/3/library/datetime.html start_dt = datetime.datetime.strptime(start_t, t_format) end_dt = datetime.datetime.strptime(end_t, t_format) ret = (end_dt - start_dt) return ret
그런데 strptime()함수의 주의할 점은 format 부분입니다.
일반적으로 시간만 표현할때는 "%H:%M:%S" 가 기본이 되고, 좀 더 복잡한 표현은 문서를 참고 하시기 바랍니다.
https://docs.python.org/ko/3/library/datetime.html
YYYY-MM-DDTHH:MM:SS.ffffff 이런 형태의 표현에서는 "%Y-%m-%dT%H:%M:%S.%f" 다음과 같이 표현합니다.
예제
이제는 본격적이 예제입니다.
start = "09:00:01" end = "10:30:01" diff = time_diff(start, end) print("--------------------") print(type(diff)) print(diff.days) print(diff.seconds) print(diff.microseconds) print(diff.seconds / 60.0) print("--------------------") # ISO FORMAT # YYYY-MM-DDTHH:MM:SS.ffffff # 1900-01-01T00:00:00.000 diff = time_diff("2022-01-15T01:12:11.000", "2023-01-16T01:12:12.100", "%Y-%m-%dT%H:%M:%S.%f") print(diff.days) print(diff.seconds) print(diff.microseconds)
타임의 차를 구하면 timedelta class가 됩니다.
<class 'datetime.timedelta'>
그리고 days, seconds, microseconds 3개의 property 만 존재합니다.
주의
따라서 3시간 이상일때 조건을 걸고 싶으면 if (diff.seconds / 60 / 60 > 3) 이런 표현을 사용해야합니다.
그런데 한가지 더 고려해야할 점은 차값이 하루가 넘어가게 된다면 그 값은 days 쪽에만 표현이 됩니다. 즉 secounds, microseconds 에 해당값이 합산되지 않습니다.
위의 예제를 살펴보면
diff = time_diff("2022-01-15T01:12:11.000", "2023-01-16T01:12:12.100", "%Y-%m-%dT%H:%M:%S.%f")
1년 하고 1초가 넘어가는 예제입니다.
결과
366 1 100000
위와 같이 표현됩니다.
댓글 없음:
댓글 쓰기