如何添加delta到python datetime.time?
从:
http://docs.python.org/py3k/library/datetime.html#timedelta-objects
timedelta对象表示持续时间,即两个date或时间之间的差异。
那么为什么我得到这个错误:
>>> 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
对象不支持与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()
只返回小时,分钟,秒等等,没有date信息.time()
返回什么,只有时间。
那么,18: 18:00:00 + 8 hours
应该怎么回呢?
这个问题没有答案,这就是为什么你不能添加时间和timedelta。
换一种说法:
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.
这是一个函数,给timedelta
增加一个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()
这将提供预期的结果,只要你不添加时间跨越午夜边界的方式。