假设我在model中有一个类
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来获取从帖子发布到现在的时间差,根据文档,DateTimeField应该能够自动转换为datetime,对吗?为什么print语句从未运行过?如何提取时间差?
此外,如果你得到一个时间差,有没有一种简单的方法将时间差转换成一个整数,比如总时间的秒数。
发布于 2013-04-15 21:15:54
您的代码已经在运行;将返回一个datetime.timedelta object。
要获取总秒数,需要对生成的timedelta调用.total_seconds() 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因为这两个对象都是时区感知的(有一个不是None的.tzinfo属性),所以它们之间的计算会考虑时区,当考虑到任何一个对象的时区时,从另一个中减去一个会做正确的事情。
发布于 2013-04-15 21:27:26
发布于 2013-04-15 21:13:29
你的代码
timediff = datetime.datetime.now() - self.pub_date应该努力获得时间差。但是,这将返回timedelta对象。要获得以秒为单位的差值,可以使用.seconds属性
timediff = datetime.datetime.now() - self.pub_date
timediff.seconds # difference in seconds.https://stackoverflow.com/questions/16016002
复制相似问题