如何让时间域自动增加5分钟(django)

zzlelutf  于 2023-01-18  发布在  Go
关注(0)|答案(2)|浏览(179)

我在django中有一个模型,它由以下字段组成:
设备=型号。字符字段(最大长度= 150,null = True)
接收时间=型号.时间字段(自动现在添加=真,空=真)
display_time =[我希望它具有与time_received相同的小时,分钟从00开始,然后间隔为5,最后秒为00]
我之所以要这么做,就是为了有序的显示时间。
例如:
设备A在8:01:20接收---〉设备A显示为8:00:00
设备A在8:07:22接收---〉设备A显示为8:05:00
最后一点:我需要在postgresql中存储显示时间和接收时间
谢谢你帮忙

cig3rfwq

cig3rfwq1#

通过在模型上创建一个定制方法,根据time_received字段计算display_time,可以实现这一点。
在模型上创建一个方法,通过从time_received中提取小时,将分钟和秒设置为0,然后加上或减去分钟以使间隔为5来计算display_time。

from datetime import datetime, timedelta

class YourModel(models.Model):
    device = models.CharField(max_length=150, null=True)
    time_received = models.TimeField(auto_now_add=True)
    display_time = models.TimeField(null=True)

    def get_display_time(self):
        hour = self.time_received.hour
        # Convert minute to nearest round of 5
        minute = self.time_received.minute // 5 * 5

        # Create a new datetime object with the calculated hour, minute and second
        display_time = datetime.strptime(f"{hour}:{minute}:00", "%H:%M:%S").time()

        return display_time

    def save(self, *args, **kwargs):
        self.display_time = self.get_display_time()
        super().save(*args, **kwargs)

这样,display_time将始终舍入到最接近的5分钟间隔,并且秒数将设置为0。
就我个人而言,我建议创建属性,而不是保存在数据库中。

41zrol4v

41zrol4v2#

除了更改模型字段,您还可以添加一个属性方法来取底该值,如下所示:

import datetime as dt

class YourModel(models.Model):
    ...
    @property
    def display_time(self):
        resolution = dt.timedelta(minutes=5)
        delta = dt.timedelta(seconds=self.recieve_time.seconds%resolution.seconds)
        return self.recieve_time - delta

相关问题