example create python date datetime division timedelta

create - string to datetime python



¿Cómo puedo realizar una división en datetime.timedelta en python? (3)

Me gustaría poder hacer lo siguiente:

num_intervals = (cur_date - previous_date) / interval_length

o

print (datetime.now() - (datetime.now() - timedelta(days=5))) / timedelta(hours=12) # won''t run, would like it to print ''10''

pero la operación de división no está soportada en timedeltas. ¿Hay alguna manera de que pueda implementar Divison para Timedeltas?

Editar: Parece que esto se agregó a Python 3.2 (gracias rincewind!): Http://bugs.python.org/issue2706


Claro, solo conviértase en una cantidad de segundos (minutos, milisegundos, horas, elija las unidades) y haga la división.

EDITAR (otra vez): así que no puedes asignar a timedelta.__div__ . Prueba esto, entonces:

divtdi = datetime.timedelta.__div__ def divtd(td1, td2): if isinstance(td2, (int, long)): return divtdi(td1, td2) us1 = td1.microseconds + 1000000 * (td1.seconds + 86400 * td1.days) us2 = td2.microseconds + 1000000 * (td2.seconds + 86400 * td2.days) return us1 / us2 # this does integer division, use float(us1) / us2 for fp division

Y para incorporar esto en la sugerencia de nadia:

class MyTimeDelta: __div__ = divtd

Ejemplo de uso:

>>> divtd(datetime.timedelta(hours = 12), datetime.timedelta(hours = 2)) 6 >>> divtd(datetime.timedelta(hours = 12), 2) datetime.timedelta(0, 21600) >>> MyTimeDelta(hours = 12) / MyTimeDelta(hours = 2) 6

etc. Por supuesto, incluso puedes nombrar (o alias) tu clase personalizada timedelta para que se use en lugar del timedelta real, al menos en tu código.


La división y la multiplicación por enteros parece funcionar de la caja :

>>> from datetime import timedelta >>> timedelta(hours=6) datetime.timedelta(0, 21600) >>> timedelta(hours=6) / 2 datetime.timedelta(0, 10800)


Puede anular al operador de división de esta manera:

class MyTimeDelta(timedelta): def __div__(self, value): # Dome something about the object