说我有一个模特类

 class Post(models.Model):
     time_posted = models.DateTimeField(auto_now_add=True, blank=True)

     def get_time_diff(self):
         timediff = timediff = datetime.datetime.now() - self.time_posted
         print timediff # this line is never executed
         return timediff

我定义了一个get_time_diff以获取从发布Post到现在的时间差,根据文档,DateTimeField应该能够自动转换为datetime,对吗?为什么打印语句永远不会运行?如何提取时差?

另外,如果得到时差,是否有一种简单的方法可以将时差转换为整数,例如总时间的秒数。

最佳答案

您的代码已经可以使用了;返回 datetime.timedelta object

要获取总秒数,您需要在生成的.total_seconds()上调用 timedelta method:

from django.utils.timezone import utc

def get_time_diff(self):
    if self.time_posted:
        now = datetime.datetime.utcnow().replace(tzinfo=utc)
        timediff = now - self.time_posted
        return timediff.total_seconds()
.total_seconds()返回float值,包括微秒。

请注意,您需要使用时区感知的datetime对象,因为Django DateTimeField也处理时区感知的datetime对象。参见Django Timezones documentation
.total_seconds()的演示(使用朴素的datetime对象,但原理相同):
>>> import datetime
>>> time_posted = datetime.datetime(2013, 3, 31, 12, 55, 10)
>>> timediff = datetime.datetime.now() - time_posted
>>> timediff.total_seconds()
1304529.299168

因为两个对象都知道时区(具有不是.tzinfoNone属性),所以在考虑每个对象的时区时,它们之间的计算会考虑时区,并且从另一个中减去一个将做正确的事情。

关于python - Django:如何从时差中获取时差?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16016002/

10-11 07:37