Django:如何从时差中得到时差?

2024-04-29 06:49:56 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个模特班

 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语句从未运行?如何提取时差?

另外,如果你得到一个时差,有没有一种简单的方法可以将时差转换成整数,比如总时间的秒数。


Tags: selftruegetdatetimetimemodelsdiffpost
1条回答
网友
1楼 · 发布于 2024-04-29 06:49:56

您的代码已经在工作;返回了^{} object

要获得的总数,您需要调用结果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值,包括微秒。

注意,您需要使用一个时区感知对象,因为Django也处理时区感知对象。见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),所以它们之间的计算会处理时区,在考虑到两个对象的时区时,从另一个对象中减去一个将做正确的事情。

相关问题 更多 >