从:
http://docs.python.org/py3k/library/datetime.html#timedelta-objects
timedelta对象表示持续时间,两个日期或时间之间的差异。
那么为什么我得到这个错误:
>>> 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
用do not support additions对象datetime.timedelta
。
有一个自然的定义,时钟算术。你可以像这样计算它:
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
对象,然后添加delta,并将结果降回到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.
这是一个将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()
只要您不以跨越午夜边界的方式添加时间,这将提供预期结果。
上面的所有解决方案都太复杂了,OP已经证明我们可以在datetime.datetime
和datetime.timedelta
之间进行计算,那么为什么不做呢:
(datetime.now() + timedelta(hours=12)).time()
datetime.time对象可以拆分为可以添加的单独整数组件。不需要timedelta,例如:
from datetime import datetime, time
time_now = datetime.now().time()
twelve_hours_time = time(time_now.hour + 12, time_now.minute)