如何将delta添加到python datetime.time?

时间:2012-09-16 16:24:21

标签: python datetime time timedelta

自:

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'

5 个答案:

答案 0 :(得分:46)

datetime.time个对象do not support additiondatetime.timedelta s。

虽然有一个自然的定义,时钟算术。 你可以像这样计算它:

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对象。< / p>

答案 1 :(得分: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 + 5 hours # Doesn't make sense.

答案 2 :(得分:2)

这是一个向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()

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

答案 3 :(得分:2)

以上所有解决方案都太复杂了,OP已经表明我们可以在const getAsync = async () => { const key = await get_async_data(config); return key; } getAsync().then(key => { const api = new API(key) } datetime.datetime之间进行计算,所以为什么不做呢?

datetime.timedelta

答案 4 :(得分:0)

datetime.time对象可以拆分为单独的整数成分,可以添加到其中。 无需时间增量,例如:

from datetime import datetime, time
    time_now = datetime.now().time()
    twelve_hours_time =  time(time_now.hour + 12, time_now.minute)