python - lib - datetime - timedelta를 float로 변환하기

1 분 소요

python - lib - datetime - timedelta를 float로 변환하기

  • python에서 시간을 다룰 때는 보통 datetime library를 사용합니다.
  • datetime.datetime()은 “날짜 + 시각”을 datetime.timedelta()는 시간 차이를 표현하죠.
  • 간단하게 다음처럼 사용할 수 있습니다.
import datetime as dt


def to_datetime(input_str):
    """
    Argument Example: 2016-05-02 14:21:36
    Return: to datetime
    """
    r = dt.datetime.strptime(input_str, "%Y-%m-%d %H:%M:%S")
    return r


dt_a = to_datetime("2021-05-06 13:11:33")
dt_b = to_datetime("2021-05-06 18:45:33")

time_diff = dt_b - dt_a
print(f"time_diff: {time_diff}")
print(f"type: {type(time_diff)}")
# time_diff: 5:34:00
# type: <class 'datetime.timedelta'>
  • 즉, 시간 차이를 표현하고 연산을 사용하려면, datetime.timedelta를 사용하면 되긴 하는데요. 그냥 간단히 “시간 차이가 1일보다 큰가?”를 확인하기 위해서도 다음의 형태로 표현해야 합니다.
if time_diff > dt.timedelta(days=1):
    print("time_diff > 1 day")
  • 이게 약간 귀찮은데요, 암묵적으로 1일은 1.0으로 처리되므로, 아래와 같이 해주면 연산자 오류가 발생합니다. floatdatetime.timedelta사이에 적합한 연산자가 존재하지 않는다는 얘기죠.
if time_diff > 1.0: 
    print("time_diff > 1 day")
"""
Traceback (most recent call last):
  File "/Users/seunghoonlee/PythonProjects/2021_09_cide_proj/code/test.py", line 20, in <module>
    if time_diff > 1.0: 
TypeError: '>' not supported between instances of 'datetime.timedelta' and 'float'
"""
  • 그럴 때는 그냥 다음처럼 처리하면 됩니다. datetime.timedelta간의 연산은 가능하고 그 결과는 float으로 리턴되거든요.
dt_a = to_datetime("2021-05-06 13:11:33")
dt_b = to_datetime("2021-05-07 18:45:33")

time_diff = dt_b - dt_a
time_diff = time_diff / datetime.timedelta(days=1)

if time_diff > 1.0: 
    print("time_diff > 1 day")

wrap-up

  • datetime.timedeltafloat으로 자동변환되도록 혹은 연산이 가능하도록 지원하는 것은 기능상으로 어려운 점이 아닐 겁니다. 다만, 서로 다른 type 간에 변환이 너무 자유롭게 된다면, 개발상 error prone한 경우가 발생할 수 있으므로 이런 경우를 미연에 방지하도록 설계한게 아닐까 싶어요. 따라서 앞으로도 서로 다른 type이 연산 가능하도록은 바뀌지 않을 것이라고 생각됩니다.
  • 위에서는 days=1로 고정하여 1일은 1.0으로 처리하였지만, 매우 당연히도 저 값을 변경하면 1.0을 1분 혹은 1년으로 바꿔서 처리하는 것도 가능합니다.

reference

댓글남기기