から:
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'
_datetime.time
_オブジェクト 追加をサポートしない with _datetime.timedelta
_ s.
ただし、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.time t
を_datetime.datetime
_オブジェクトに持ち上げ、その後デルタが追加され、結果は_datetime.time
_オブジェクトにドロップダウンされます。
これはどのように機能しますか? 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 + 5 hours # Doesn't make sense.
上記のソリューションはすべて複雑すぎます。OPは、datetime.datetime
およびdatetime.timedelta
、それではどうして:
(datetime.now() + timedelta(hours=12)).time()
time
を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時の境界を越えるように時間を追加しない限り、期待される結果が得られます。
Datetime.timeオブジェクトは、追加できる個別の整数コンポーネントに分割できます。タイムデルタの必要はありません。例:
from datetime import datetime, time
time_now = datetime.now().time()
twelve_hours_time = time(time_now.hour + 12, time_now.minute)