from example create python datetime time timedelta

example - strftime python



¿Cómo agregar delta a python datetime.time? (4)

De:

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

Un objeto timedelta representa una duración, la diferencia entre dos fechas u horas.

Entonces, ¿por qué me sale un error con esto?

>>> 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''


¿Cómo funcionaría esto? datetime.datetime.now().time() devuelve solo horas, minutos, segundos, etc., no hay información de fecha que .time() , solo hora.

Entonces, ¿qué deberían 18:00:00 + 8 hours ?
No hay respuesta a esa pregunta, y es por eso que no puede agregar un tiempo y un timedelta.

En otras palabras:

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.


Aquí hay una función que agrega un time a un 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()

Esto proporcionará el resultado esperado siempre que no agregue tiempos de una manera que cruce un límite de medianoche.


Un objeto datetime.time se puede dividir en componentes enteros separados a los que puede agregar. No hay necesidad de timedelta por ejemplo:

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


datetime.time objetos datetime.time no admiten la adición con datetime.timedelta s.

Sin embargo, hay una definición natural, la aritmética del reloj. Usted podría calcularlo así:

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(...) levanta el datetime.time t a un objeto datetime.datetime , el delta luego se agrega, y el resultado se vuelve a bajar a un objeto datetime.time .