2023년 6월 18일 일요일

python time diff, timedelta

 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

위와 같이 표현됩니다.




댓글 없음:

댓글 쓰기