Django:如何return当前时间和DateTimeField的值之间的小时差?

Django: How to return the hours difference between current time and the value of DateTimeField?

我试图获取现在和数据最后一次调用之间的时间差,并在网站上进行监控。

我的 models.py 代码是;

class MyModel(models.Model):
    th_id = models.CharField(max_length=55)
    src_id = models.IntegerField()
    call_time = models.DateTimeField()

    @property
    def time_diff(self):
        if self.call_time:
            return (datetime.now().date() - self.call_time.date()) > timedelta(hours=2)
        else:
            return 0
    def now_diff(self):
        return datetime.now().date() - self.call_time.date()

但我还需要 now_diff 函数来 return 时差。我已经在互联网上搜索但找不到任何解决方案,date() 对象没有 return 小时或分钟。有办法吗?

问题是因为您正在执行 datetime.now.date(),这会丢失时间部分,您会得到类似 datetime.date(2019, 2, 23) 的内容。如果你想保留时间,因为你需要时间,那么删除 .date() 以便保留时间部分:

>>> from datetime import datetime
>>> import pytz
>>> from tzlocal import get_localzone

这里我使用本地时区。阅读 pytz 时区,例如 pytz.utc 的 UTC 时间。

>>> local_tz = get_localzone()

使用 .date() 你没有小时或分钟

>>>> datetime.now(local_tz).date()
datetime.date(2019, 2, 25)

没有 .date() 你可以看到你有小时分钟秒和 usecs

>>> datetime.now(local_tz)
datetime.datetime(2019, 2, 25, 12, 33, 42, 425078, tzinfo=<DstTzInfo 'Europe/Amsterdam' CET+1:00:00 STD>)

计算时差。您可以按如下方式编写函数:

def now_diff(self):
    delta = datetime.now() - self.call_time
    return delta.total_seconds() / (60 * 60)

注:两个日期或时间的差returnstimedelta对象