将Django TimeField中的时间乘以浮点数

时间:2017-05-01 16:19:40

标签: python django

我试图将当前表示为字符串的时间读入Python 2.7中的Django TimeField模型,并同时通过浮点数进行缩放。

例如:

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

我已经成功阅读并存储到模型中,但无法在" nice"中缩放时间。方式(目前我从数据库中读取时间对象并更新它)。

我想在保存到数据库之前使用TimeField所基于的python datatime对象来执行此计算。

相关代码:

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 个答案:

答案 0 :(得分:1)

除以浮点在Python 2.x中不起作用,但在python 3.2x中有效 通常,为了减少时间,你会做类似下面的事情:

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

要分散时间,你必须将timedelta子类化为类似

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

有关here的更多信息。希望有所帮助。