날짜나 시간에 시간을 더하거나 빼야 할 때(오프셋 적용)는 datetime.datetime() 객체를 만든 다음, datetime.timedelta() 인스턴스를 더하거나 빼면 됩니다. timedelta 객체는 지속 기간(duration), 즉 두 날짜 또는 두 시각 사이의 차이를 나타내는 객체입니다.
timedelta 생성자의 함수 시그니처는 다음과 같습니다.
datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
참고: 모든 인수는 선택 사항이며 기본값은 0입니다. 인수로는 int, long 또는 float를 사용할 수 있으며, 양수와 음수 모두 허용됩니다. 자세한 내용은 Python 공식 문서(timedelta objects)에서 확인할 수 있습니다.
예제
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
위 예제에서 볼 수 있듯이, timedelta를 사용하면 일(day), 초(second), 밀리초(millisecond), 분(minute), 시(hour), 주(week) 등 다양한 단위로 시간 연산을 간단하게 수행할 수 있습니다. 음수 값을 사용하면 과거 시점으로, 양수 값을 사용하면 미래 시점으로 이동할 수도 있습니다.
datetime.time 객체에 오프셋 적용하기
주의할 점은 timedelta() 연산이 datetime.time() 객체에는 직접 지원되지 않는다는 것입니다. 기존 time 객체를 기준으로 오프셋을 적용해야 한다면, 먼저 datetime.datetime.combine() 메서드를 사용해 datetime 객체를 만든 뒤 계산을 수행하고, 마지막에 .time() 메서드로 다시 시간만 추출하면 됩니다.
import datetime t = datetime.time(11, 30) combined = datetime.datetime.combine(datetime.date.today(), t) new_combined = combined - datetime.timedelta(hours=1) new_t = new_combined.time() print(new_t) # 10:30:00
이 방식을 활용하면 time 객체에 대해서도 안전하게 시간 오프셋 계산을 처리할 수 있습니다.