Джанго: Как вернуть разницу в часах между текущим временем и значением DateTimeField? - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь получить разницу во времени между текущим и последним вызовом данных и отслеживанием этого на веб-сайте.

мои коды 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, чтобы также вернуть разницу в часах.Я искал в интернете, но не могу найти решение, объект date () не возвращает часы или минуты.Есть ли способ?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Для вычисления различий часов.Вы можете написать свою функцию следующим образом:

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

Примечание. Разница между двумя датами или временем возвращает timedelta object.

0 голосов
/ 23 февраля 2019

Проблема в том, что вы делаете 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>)
...