Estoy tratando de leer un tiempo actualmente representado como una cadena en un modelo Django TimeField en Python 2.7 y escalarlo a través de un flotador al mismo tiempo.
Por ejemplo:
00:31:14 / 1.0617 = 00:29:20He leído con éxito el tiempo y lo he almacenado en el modelo, pero no puedo escalar el tiempo de una manera "agradable" (actualmente leo el objeto de tiempo de la base de datos y lo actualizo).
Me gustaría usar el objeto de tiempo de datos de python en el que se basa TimeField para hacer este cálculo antes de guardarlo en la base de datos.
Código relevante:
class Time(models.Model): time = models.TimeField() date = models.DateField() date = "12/6/2009" time = "00:31:14" date = datetime.strptime(date, "%d/%m/%Y").strftime("%Y-%m-%d") time = models.Time(date=date, time=time) time.save() db_instance = models.Time.objects.all().filter(id=time.id)[0] db_instance.time = db_instance.time.replace( minute=int((db_instance.time.minute * 60 + db_instance.time.second) / 1.0617) / 60, second=int((db_instance.time.minute * 60 + db_instance.time.second) / 1.0617) % 60)Actualizar
Como sugirió Dandekar, amplié la clase timedelta para incluir la multiplicación y la división:
from datetime import timedelta class TimeDeltaExtended(timedelta): def __div__(self, divisor): return TimeDeltaExtended(seconds=self.total_seconds()/divisor) def __mul__(self, multiplier): return TimeDeltaExtended(seconds=self.total_seconds()*multiplier)La división por flotador no funciona en Python 2.x pero funciona en Python 3.2x Entonces, normalmente, para RESTAR el tiempo, haces algo como lo siguiente:
dt = date+" "+time dt=datetime.datetime.strptime(dt, "%d/%m/%Y %H:%M:%S") delta=datetime.timedelta(seconds=1.0617) adjusted=dt-delta print adjusted.strftime("%d/%m/%Y %H:%M:%S")Para DIVIDIR el tiempo, tendría que subclasificar timedelta a algo como
class MyTimeDelta(timedelta): def __div__(self, deltafloat): # CodeMás sobre eso aquí . Espero que ayude.