54

从:

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'
4

5 回答 5

80

datetime.time对象不支持datetime.timedeltas 的加法。

不过,有一个自然定义,时钟算术。你可以这样计算:

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.timet提升到一个datetime.datetime对象,然后添加增量,并将结果放回一个datetime.time对象。

于 2012-09-16T16:42:57.890 回答
14

上面所有的解决方案都太复杂了,OP已经表明我们可以在 和 之间进行计算datetime.datetimedatetime.timedelta所以为什么不这样做:

(datetime.now() + timedelta(hours=12)).time()

于 2019-02-23T00:06:21.827 回答
4

这是一个将 a 添加time到 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()

只要您不以跨越午夜边界的方式添加时间,这将提供预期的结果。

于 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 回答