파이썬 날짜 연산 timedelta

코드를 작성하다 보면 특정 일자를 구하거나 현재 일자와의 갭을 연산해야 하는 경우가 발생합니다.

이때 활용할 수 있는 함수가 timedelta입니다. timedelta는 datetime 라이브러리 안에 정의되어 있습니다.

 

파이썬 일자 연산

파이썬 특정 일자 생성

특정 일자를 생성해 보도록 하겠습니다. 특정일자는 datetime(년, 월, 일, 시, 분, 초, 밀리 초)로 생성할 수 있습니다.

from datetime import datetime, timedelta

mk_dt = datetime(2019, 9, 1, 13, 1,30, 711811)
print(mk_dt)

#결과
#2019-09-01 13:01:30.711811

 

※ 주의 사항 ※

1. 일자와 시간 앞에 0을 입력하면 오류 발생 (예> 9월의 경우 09가 아닌 9로 입력)

2. 년, 월, 일은 필수 입력 사항

 

파이썬 현재 일자와 특정 일자 연산

from datetime import datetime, timedelta

mk_dt = datetime(2019, 9, 1, 13, 1,30, 711811)
calc_dt = datetime.today() - mk_dt

calc_dt
print(calc_dt)
type(calc_dt)

#결과
#datetime.timedelta(days=1, seconds=84342, microseconds=701548)
#1 day, 23:25:42.701548
#<class 'datetime.timedelta'>

 

현재 일자와 특정 일자의 갭을 확인하였습니다. 일자상으로 이 글을 작성하는 일자가 9월 3일 이어서 생성한 특정일자와 2일의 갭이 존재하는데 24시간을 기준으로 만 2일이 되지 않아 갭이 1일로 표시되는 것을 확인할 수 있습니다. 이렇게 계산된 식별자의 타입은 timedelta 클래스 타입입니다.

 

timedelta 클래스 타입은 days, seconds, microseconds 어트리뷰트를 통해 값을 가져올 수 있습니다.

 

from datetime import datetime, timedelta

mk_dt = datetime(2019, 9, 1, 13, 1,30, 711811)
calc_dt = datetime.today() - mk_dt

print(calc_dt.days)
print(calc_dt.seconds)
print(calc_dt.microseconds)

#결과
#1
#84342
#701548

 

파이썬 timedelta 연산

timedelta의 인자는 다음과 같이 선택적이면서 기본값이 0입니다. 이 인자를 통하여 일자를 연산할 수 있습니다.

timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

 

from datetime import datetime, timedelta

mk_dt = datetime(2019, 9, 1, 13, 1,30, 711811)
curr_dt = datetime.today()

print('-'*20)
print(curr_dt)
print('-'*20)
print(curr_dt + timedelta(days=1))
print(curr_dt + timedelta(days=-1))
print(curr_dt - timedelta(days=1))
print(curr_dt - timedelta(days=-1))
print('-'*20)
print(mk_dt)
print('-'*20)
print(mk_dt + timedelta(hours=1))
print(mk_dt + timedelta(days=7, hours=-3))

#결과
#--------------------
#2019-09-03 12:53:36.562241
#--------------------
#2019-09-04 12:53:36.562241
#2019-09-02 12:53:36.562241
#2019-09-02 12:53:36.562241
#2019-09-04 12:53:36.562241
#--------------------
#2019-09-01 13:01:30.711811
#--------------------
#2019-09-01 14:01:30.711811
#2019-09-08 10:01:30.711811

 

특정 일자와 timedelta의 연산으로 +와 -를 사용할 수 있으며 함수의 인자 값으로 양수와 음수를 사용하여 연산이 가능합니다.

 

위의 예제 중 timedelta의 연산 시 -연산을 하고 함수의 인자 값으로 음수를 사용할 경우 +로 연산이 되는 것에 유의하셔야 합니다. 하지만 curr_dt - timedelta(days = -1)이라고 표현하게 되면 가독성이 조금 떨어지는 경향이 있습니다. 그러므로 직관적으로 알 수 있는 curr_dt + timedelta(days = 1)이라고 표현하는 것을 추천합니다.

 

MORE