なぜ date + timedelta は datetime ではなく date になるのでしょうか? 質問する

なぜ date + timedelta は datetime ではなく date になるのでしょうか? 質問する

Pythonでは、混合型の数値の演算では、狭い型は他の人のそれまで広がった、例えばint+ floatfloat:

In [57]: 3 + 0.1
Out[57]: 3.1

しかし についてはdatetime.datedatetime.date+ datetime.timedeltadatetime.dateない datetime.datetime:

In [58]: datetime.date(2013, 1, 1) + datetime.timedelta(seconds=42)
Out[58]: datetime.date(2013, 1, 1)

なぜ拡大推論は数値には適用され、date/ datetime/には適用されないのでしょうかtimedelta?

(背景: 1 つのフィールドが年、1 つのフィールドが年間通算日、1 つのフィールドが午前 0 時からのミリ秒であるファイル形式の読み取りルーチンを作成しています。もちろん、単純で明示的なソリューションは ですが、とdatetime.datetime(2013, 1, 1, 0, 0, 0) + datetime.timedelta(seconds=42)書き直す必要があるという理由も同様に考えられます。)3 + 0.13.0 + 0.1

ベストアンサー1

オブジェクトtimedeltaには、日付だけか、時間も関係するかどうかに関する情報は保存されません。(時間/分/秒/マイクロの数値が 0 であるという事実は単なる偶然かもしれません!)

したがって、時間を無視して日付だけを操作したい人がいると仮定すると、 のような操作を行うことになります。 がオブジェクトではなくオブジェクトになっているmy_new_date = my_old_date + timedelta(days=1)ことに気付いたら、非常に驚​​き、おそらくイライラするでしょう。my_new_datedatetimedate

おすすめ記事