Python에서는 timedelta 객체를 사용하면 날짜와 시간 계산을 아주 쉽게 처리할 수 있습니다. 특정 날짜나 시간에 기간을 더하거나 뺄 때는 먼저 datetime.datetime() 객체를 만든 뒤, 여기에 datetime.timedelta() 인스턴스를 더하거나 빼면 됩니다.
timedelta 객체는 '기간(duration)', 즉 두 날짜 또는 두 시각 사이의 차이를 나타냅니다. 생성자의 함수 시그니처는 다음과 같습니다.
datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
timedelta 사용 시 주의사항
모든 인자는 선택 사항이며 기본값은 0입니다. 인자로는 정수(int), long, 실수(float)를 사용할 수 있고, 양수와 음수 모두 허용됩니다. 자세한 내용은 공식 문서(datetime — timedelta objects)에서 확인할 수 있습니다.
예제: 특정 시간에서 2시간 10분 빼기
다음은 timedelta 객체를 활용해 현재 시간에서 2시간 10분 전의 시각을 구하는 예제입니다.
import datetime old_time = datetime.datetime.now() print(old_time) new_time = old_time - datetime.timedelta(hours=2, minutes=10) print(new_time)
실행 결과
2018-01-04 11:09:00.694602 2018-01-04 08:59:00.694602
datetime.time 객체에서의 제한과 해결 방법
datetime.time() 객체에는 timedelta 연산이 지원되지 않습니다. 만약 기존 time 객체에 오프셋(시간 차이)을 적용해야 한다면, 다음 순서로 처리하세요.
datetime.datetime.combine()을 사용해date와time을 합쳐datetime.datetime인스턴스를 만듭니다.- 필요한 계산을 수행합니다.
.time()메서드로 다시 시간(time) 부분만 추출합니다.
두 datetime 객체의 차이 구하기
datetime 객체끼리 빼면 그 결과로 timedelta 객체가 반환됩니다. 이 객체를 이용하면 두 시각 사이의 정확한 차이를 알 수 있습니다.
t1 = datetime.datetime.now() t2 = datetime.datetime.now() print(t1 - t2) print(type(t1 - t2))
실행 결과
-1 day, 23:59:56.653627 <class 'datetime.timedelta'>
위 결과에서 볼 수 있듯이, 두 datetime 객체의 차감 결과 타입은 datetime.timedelta입니다. 이처럼 Python의 timedelta를 활용하면 날짜 더하기·빼기, 두 시점 간 간격 계산 등 다양한 날짜·시간 연산을 손쉽게 구현할 수 있습니다.