Skip to main content
 首页 » 编程设计

python之将 Django TimeField 中的时间乘以 float

2025年02月15日25lautakyan007

我正在尝试将当前表示为字符串的时间读入 Python 2.7 中的 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) 

请您参考如下方法:

float 除法在 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 .希望对您有所帮助。