说我有一个模特类
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
因为两个对象都知道时区(具有不是
.tzinfo
的None
属性),所以在考虑每个对象的时区时,它们之间的计算会考虑时区,并且从另一个中减去一个将做正确的事情。关于python - Django:如何从时差中获取时差?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16016002/