111

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)
4

3 に答える 3

89

dateutildatetimepython 標準モジュールの拡張パッケージです。おっしゃるとおり、1 日より大きい単位で表される timedeltas などの追加機能を提供します。

これは、ガールフレンドの誕生日が来る前に何ヶ月節約できるか、または月の最後の金曜日はいつになるかなどの質問をしなければならない場合に便利です。これにより、さまざまな月の長さ、またはうるう年の余分な日数によって発生する複雑な計算が隠されます。

あなたの場合、日数だけに関心があります。これにより、パッケージtimedeltaへの余分な依存関係が回避されるため、使用するのが最適です。dateutil

于 2012-09-14T23:44:26.963 に答える
44

Arelativedeltaには、 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)
于 2012-09-14T23:47:29.513 に答える