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