简体   繁体   English

如何将增量添加到 python datetime.time?

[英]How to add delta to python datetime.time?

From:从:

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

A timedelta object represents a duration, the difference between two dates or times. timedelta 对象表示持续时间,即两个日期或时间之间的差异。

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

datetime.time objects do not support addition with datetime.timedelta s. datetime.time对象不支持添加datetime.timedelta s。

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. dt.datetime.combine(...)将 datetime.time t提升到datetime.datetime对象,然后添加增量,并将结果返回到datetime.time对象。

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

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

Here is a function that adds a timedelta to a time :这是一个将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()

This will provide the expected result so long as you don't add times in a way that crosses a midnight boundary.只要您不以跨越午夜边界的方式添加时间,这将提供预期的结果。

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. datetime.datetime.now().time()只返回小时、分钟、秒等, .time()返回的没有日期信息,只有时间。

Then, what should 18:00:00 + 8 hours return?那么,18: 18:00:00 + 8 hours应该返回什么?
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 + 8 hours # Doesn't make sense.

A datetime.time object can be split into separate integer components that you can add to.可以将 datetime.time 对象拆分为可以添加的单独整数组件。 No need for timedelta eg:不需要 timedelta 例如:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM