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

xli*_*iiv 33 python time datetime 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'
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 52

datetime.time对象不支持除了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
Run Code Online (Sandbox Code Playgroud)

dt.datetime.combine(...)将datetime.time t提升为datetime.datetime对象,然后添加delta,并将结果放回到datetime.time对象.

  • 这是很多工作.我只想计算一个时移,python :).不过这是解决方案,谢谢. (14认同)

ssw*_*ord 9

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

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

  • @jonrios括号内的计算给出一个`datetime.datetime`对象,但是`.time()`将输出一个`datetime.time`对象 (2认同)

Dav*_*ter 5

timedelta这是一个将 a 添加到 a 的函数time

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()
Run Code Online (Sandbox Code Playgroud)

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