2017-05-01 10 views
2

現在、文字列として表されている時間をPython 2.7のDjango TimeFieldモデルに読み込み、同時にfloatでスケールします。例えばDjango TimeFieldの時間をfloatで掛ける

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

私が成功した時に読み込まれ、モデルに保存されますが(現在、私は背中のうち時刻オブジェクトを読んで「素敵」な方法で時間をスケーリングすることはできませんしましたデータベースを更新してください)。

データベースに保存する前に、この計算を行うためにTimeFieldの基になっているpythonデータ型オブジェクトを使用したいと思います。

関連するコード:

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) 

更新

Dandekarによって示唆されるように、私は乗算と除算を含めることはtimedeltaクラスを拡張しました:

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) 

答えて

1

部門フロートによってはしていませんPython 2.xで動作しますが、Pythonで動作します3.2x 通常、SUBTRACTの時間には、下記のE:時間を分割する

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

は、あなたはそのhere

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

よりのようなものにはtimedeltaをサブクラス化する必要があります。希望が役立ちます。

関連する問題