Pythonでは、混合型の数値の演算では、狭い型は他の人のそれまで広がった、例えばint
+ float
→ float
:
In [57]: 3 + 0.1
Out[57]: 3.1
しかし についてはdatetime.date
、datetime.date
+ datetime.timedelta
→ datetime.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.1
3.0 + 0.1
ベストアンサー1
オブジェクトtimedelta
には、日付だけか、時間も関係するかどうかに関する情報は保存されません。(時間/分/秒/マイクロの数値が 0 であるという事実は単なる偶然かもしれません!)
したがって、時間を無視して日付だけを操作したい人がいると仮定すると、 のような操作を行うことになります。 がオブジェクトではなくオブジェクトになっているmy_new_date = my_old_date + timedelta(days=1)
ことに気付いたら、非常に驚き、おそらくイライラするでしょう。my_new_date
datetime
date