dor*_*mon 19 python django datetime django-models
说我有一个模特课
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
Run Code Online (Sandbox Code Playgroud)
我定义了一个get_time_diff来获取Post发布到现在的时间差,根据文档,DateTimeField应该能够自动转换为datetime,这是正确的吗?为什么print语句永远不会运行?你怎么能提取时差?
此外,如果您得到时差,是否有一种简单的方法可以将时差转换为整数,例如总时间的秒数.
Mar*_*ers 31
你的代码已经运行了; 返回一个datetime.timedelta对象.
要获得总数秒相反,你需要调用的.total_seconds()方法对所得到的timedelta:
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()
Run Code Online (Sandbox Code Playgroud)
.total_seconds()返回一个float值,包括微秒.
请注意,您需要使用时区感知 datetime对象,因为Django也DateTimeField处理时区感知datetime对象.请参阅Django Timezones文档.
演示.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
Run Code Online (Sandbox Code Playgroud)
因为两个对象都是时区感知的(具有不属于的.tzinfo属性None),所以它们之间的计算处理时区并且从另一个中减去一个将在考虑任一对象的时区时做正确的事情.
假设您在模板中执行此操作,您还可以使用timesince模板标记.
例如:
{{ blog_date|timesince:comment_date }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22199 次 |
| 最近记录: |