다른 답변에서 강조되지 않은 한 가지 주요 차이점은 각 시차 원시에 대한 단수 및 복수 명사의 존재입니다. 동안 timedelta
만 이벤트 명사를 복수 (예를 들면 hours
, days
)의 상대 시간차를, 나타 내기 위해 relativedelta
잘 (예로서 쿠폰 단수 명사 hour
, day
) 절대 시간 정보를 나타 내기 위해.
이것은 두 클래스의 정의에서 분명합니다.
Definition: datetime.timedelta([days[, seconds[, microseconds[,
milliseconds[, minutes[, hours[, weeks]]]]]]])
Definition: relativedelta.relativedelta(self, dt1=None, dt2=None,
years=0, months=0, days=0, leapdays=0, weeks=0, hours=0, minutes=0,
seconds=0, microseconds=0, year=None, month=None, day=None,
weekday=None, yearday=None, nlyearday=None, hour=None, minute=None,
second=None, microsecond=None)
이제 단수형은 정확히 무엇을합니까? 단수 형태는 (A)에 첨가 델타 생성 datetime
프리미티브 특정 날짜 / 시간 것을 객체 세트 datetime
것과 목적은에서 언급 relativedelta
. 다음은 작은 예입니다.
>>> import datetime as dt; from dateutil.relativedelta import *
>>> NOW = dt.datetime(2018, 11, 17, 9, 6, 31)
>>> NOW
datetime.datetime(2018, 11, 17, 9, 6, 31)
>>> NOW + relativedelta(hours=1)
datetime.datetime(2018, 11, 17, 10, 6, 31)
>>> NOW + relativedelta(hour=1)
datetime.datetime(2018, 11, 17, 1, 6, 31)
이로 인해 relativedelta
일부 흥미로운 응용 프로그램에 사용될 수 있으며 timedelta
. 금방 떠오르는 것은 반올림입니다.
흥미로운 응용 프로그램 : 빠르게 반올림
이제 객체를 가장 가까운 분, 시간, 일 등으로 relativedelta
반올림 할 때 어떻게 더 표현력 이 있는지 보여 드리겠습니다 datetime
.
가장 가까운 시간으로 반올림 :
다음을 사용하여 반올림하는 것이 얼마나 간단한 지 확인하십시오 relativedelta
.
NOW + relativedelta(hours=1, minute=0, second=0, microsecond=0)
dt.combine(NOW.date(),dt.time(NOW.hour,0,0)) + dt.timedelta(0,60*60,0)
다른 더 복잡한 반올림은를 사용하여 쉽게 얻을 수 있습니다 relativedelta
. 그러나에서 수행 할 수있는 모든 반올림은 함수 relativedelta
및를 사용하여 수행 할 수 있으며 약간 더 복잡한 방식으로 만 수행 할 수 있습니다 .datetime
timedelta
dateime.timedelta
원하는 것을 달성하고 외부dateutil
패키지 에 대한 종속성을 피할 수있는 표준 라이브러리를 사용하십시오 .