일로 만 작업 할 때 "datetime.timedelta"와 "dateutil.relativedelta.relativedelta"의 차이점은 무엇입니까?
datetime.timedelta
(Python의 표준 라이브러리에서) dateutil.relativedelta.relativedelta
와 며칠 만 작업 할 때 의 차이점은 무엇입니까 ?
내가 아는 한, timedelta
에서는 일 (및 주) 만 지원하고 relativedelta
연도, 월, 주 또는 일로 정의 된 기간에 대한 지원을 추가하고 연도, 월 또는 일에 대한 절대 값을 정의합니다. (이 질문의 목적을 위해 시간, 분 또는 초에 대해 걱정할 필요가 없음을 기억하십시오)
나는 단지 함께 일하고 있어요 점을 감안하면 datetime.date
객체 만의 차이 무엇, 일의 숫자로 정의 된 기간에 관심 timedelta
과는 relativedelta
? 차이가 있습니까?
from datetime import date, timedelta
from dateutil.relativedelta import relativedelta
i = -1 # This could have been any integer, positive or negative
someday = date.today()
# Is there any difference between these two lines?
otherday = someday + timedelta(days=i)
otherday = someday + relativedelta(days=i)
dateutil
파이썬 표준 datetime
모듈에 대한 확장 패키지 입니다. 말했듯이 하루보다 큰 단위로 표현되는 타임 델타와 같은 추가 기능을 제공합니다.
이것은 내 여자 친구의 생일이 오기 전에 몇 개월을 절약 할 수 있는지, 또는 그 달의 마지막 금요일이 언제인지와 같은 질문을해야 할 때 유용합니다. 이는 월의 길이가 다르거 나 윤년의 추가 일수로 인해 발생하는 복잡한 계산을 숨 깁니다.
귀하의 경우에는 일 수에만 관심이 있습니다. 따라서 패키지 timedelta
에 대한 추가 종속성을 피할 수 있으므로 사용 하는 것이 가장 좋습니다 dateutil
.
A relativedelta
에는 a보다 더 많은 매개 변수가 있습니다 timedelta
.
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)
한 달의 마지막 금요일 계산과 같은 작업을 수행 할 수 있습니다.
In [14]: import datetime as dt
In [15]: import dateutil.relativedelta as relativedelta
In [16]: today = dt.date.today()
In [17]: rd = relativedelta.relativedelta(day = 31, weekday = relativedelta.FR(-1))
In [18]: today+rd
Out[18]: datetime.date(2012, 9, 28)
다른 답변에서 강조되지 않은 한 가지 주요 차이점은 각 시차 원시에 대한 단수 및 복수 명사의 존재입니다. 상대 시차를 표시하기 위해 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) #Simply add one hour
datetime.datetime(2018, 11, 17, 10, 6, 31)
>>> NOW + relativedelta(hour=1) #Set the hour to 01:00 am
datetime.datetime(2018, 11, 17, 1, 6, 31)
이로 인해 relativedelta
일부 흥미로운 응용 프로그램에 사용될 수 있으며 timedelta
. 금방 떠오르는 것은 반올림입니다.
흥미로운 응용 프로그램 : 빠르게 반올림
이제 객체를 가장 가까운 분, 시간, 일 등으로 relativedelta
반올림 할 때 어떻게 더 표현력 이 있는지 보여 드리겠습니다 datetime
.
가장 가까운 시간으로 반올림 :
다음을 사용하여 반올림하는 것이 얼마나 간단한 지 확인하십시오 relativedelta
.
#Using `relativedelta`
NOW + relativedelta(hours=1, minute=0, second=0, microsecond=0)
#Using `timedelta`
dt.combine(NOW.date(),dt.time(NOW.hour,0,0)) + dt.timedelta(0,60*60,0)
다른 더 복잡한 반올림은를 사용하여 쉽게 얻을 수 있습니다 relativedelta
. 그러나에서 수행 할 수있는 모든 반올림은 함수 relativedelta
및를 사용하여 수행 할 수 있으며 약간 더 복잡한 방식으로 만 수행 할 수 있습니다 .datetime
timedelta
'ProgramingTip' 카테고리의 다른 글
Python : __builtin__과 __builtins__의 차이점은 무엇입니까? (0) | 2020.11.05 |
---|---|
목록에서 항목을 빠르게 제거하는 방법 (0) | 2020.11.05 |
console.log () 또는 동기화? (0) | 2020.11.05 |
구성 요소 Angular 2 내에서 리디렉션 (0) | 2020.11.05 |
NoSQL의 트랜잭션? (0) | 2020.11.05 |