54

から:

http://docs.python.org/py3k/library/datetime.html#timedelta-objects

timedelta オブジェクトは、期間、つまり 2 つの日付または時刻の差を表します。

だから、なぜ私はこれでエラーが発生するのですか:

>>> from datetime import datetime, timedelta, time
>>> datetime.now() + timedelta(hours=12)
datetime.datetime(2012, 9, 17, 6, 24, 9, 635862)
>>> datetime.now().date() + timedelta(hours=12)
datetime.date(2012, 9, 16)

>>> datetime.now().time() + timedelta(hours=12)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'
4

5 に答える 5

80

datetime.timeオブジェクトは s による加算をサポートしていませんdatetime.timedelta

ただし、自然な定義が 1 つあります。クロック演算です。次のように計算できます。

import datetime as dt
now = dt.datetime.now()
delta = dt.timedelta(hours = 12)
t = now.time()
print(t)
# 12:39:11.039864

print((dt.datetime.combine(dt.date(1,1,1),t) + delta).time())
# 00:39:11.039864

dt.datetime.combine(...)datetime.timetdatetime.datetimeオブジェクトにリフトし、次にデルタが追加され、結果がdatetime.timeオブジェクトにドロップされます。

于 2012-09-16T16:42:57.890 に答える
4

timeaに aを追加する関数は次のtimedeltaとおりです。

def time_plus(time, timedelta):
    start = datetime.datetime(
        2000, 1, 1,
        hour=time.hour, minute=time.minute, second=time.second)
    end = start + timedelta
    return end.time()

これは、午前 0 時の境界を越える方法で時間を追加しない限り、期待どおりの結果を提供します。

于 2015-08-04T19:33:17.353 に答える
3

これはどのように機能しますか?datetime.datetime.now().time()時間、分、秒などのみを.time()返します。返される日付情報はなく、時間のみが返されます。

では、何を18:00:00 + 8 hours返す必要がありますか?
その質問に対する答えはありません。そのため、時間とタイムデルタを追加することはできません。

言い換えると:

18:28:44, Sep. 16, 2012 + 8 hours #makes sense: it's 2:28:44, Sep. 17, 2012
18:28:44 + 8 hours # Doesn't make sense.
于 2012-09-16T16:28:13.630 に答える
0

datetime.time オブジェクトは、追加できる個別の整数コンポーネントに分割できます。timedelta は必要ありません。例:

from datetime import datetime, time
    time_now = datetime.now().time()
    twelve_hours_time =  time(time_now.hour + 12, time_now.minute)
于 2018-07-20T11:24:54.697 に答える