How to add delta to python datetime.time?

匿名 (未验证) 提交于 2019-12-03 02:20:02

问题:

From:

http://docs.python.org/py3k/library/datetime.html#timedelta-objects

A timedelta object represents a duration, the difference between two dates or times.

So why i get error with this:

>>> 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 "", line 1, in  TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta' 

回答1:

datetime.time objects do not support addition with datetime.timedeltas.

There is one natural definition though, clock arithmetic. You could compute it like this:

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(...) lifts the datetime.time t to a datetime.datetime object, the delta is then added, and the result is dropped back down to a datetime.time object.



回答2:

How would this work? datetime.datetime.now().time() returns only hours, minutes, seconds and so on, there is no date information what .time() returns, only time.

Then, what should 18:00:00 + 8 hours return?
There's not answer to that question, and that's why you can't add a time and a timedelta.

In other words:

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. 


回答3:

Here is a function that adds a time to 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() 

This will provide the expected result so long as you don't add times in a way that crosses a midnight boundary.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!