2017-05-01 6 views
2

Ich versuche, eine Uhrzeit, die derzeit als Zeichenfolge in einem Django TimeField-Modell in Python 2.7 dargestellt wird, zu lesen und es gleichzeitig über einen Float skalieren.Multiplizieren Zeit in Django TimeField durch float

Zum Beispiel:

00:31:14/1.0617 = 00:29:20 

ich erfolgreich in der Zeit gelesen habe und in das Modell gespeichert, kann aber nicht die Zeit in einer „schönen“ Art und Weise skaliert (zur Zeit las ich die Zeit Objekt wieder aus die Datenbank und aktualisiere sie).

Ich möchte das Python-Datatime-Objekt verwenden, auf dem das TimeField basiert, um diese Berechnung vor dem Speichern in der Datenbank durchzuführen.

Relevante Code:

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) 

aktualisieren

Wie Dandekar schlug ich habe die Timedelta-Klasse erweitert Multiplikation und Division enthalten:

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) 

Antwort

1

der Division durch Schwimmer nicht Arbeit in Python 2.x aber funktioniert in Python 3.2x So normalerweise, SUBTRACT Zeit, Sie tun etwas wie e unter:

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") 

Zeit einzuteilen, würden Sie Timedelta zu so etwas wie

class MyTimeDelta(timedelta): 
    def __div__(self, deltafloat): 
     # Code 

Mehr zu diesem here Unterklasse müssen. Ich hoffe, das hilft.

Verwandte Themen