# aware time:清醒的时间(清醒的知道自己这个时间代表的是哪个时区的)
# navie time:幼稚的时间(不知道自己的时间代表的是哪个时区)
在settings.py中设置
LANGUAGE_CODE = 'en-us' TIME_ZONE = 'Asia/Shanghai' # need1 USE_I18N = True USE_L10N = True USE_TZ = True # 设置为aware time ps:清醒的时间,自动区分时区 need2
#### 使用aware time 进行计算操作。出现的错误
can't subtract offset-naive and offset-aware datetimes
因为在django中使用的是aware time,而通过datetime.now()获取当前时间是 navie time类型,
解决办法:使用django提供的获取当前aware time类型的时间
from django.utils.timezone import now
# -*- coding: utf-8 -*- from datetime import datetime from django import template from django.utils.timezone import now register = template.Library() @register.filter def time_since(value): """ time距离现在的时间间隔 1.如果时间间隔小于1分钟以内,那么就显示“刚刚” 2.如果是大于1分钟小于1小时,那么就显示“xx分钟前” 3.如果是大于1小时小于24小时,那么就显示“xx小时前” 4.如果是大于24小时小于30天以内,那么就显示“xx天前” 5.否则就是显示具体的时间 2017/10/20 16:15 """ print(value) # aware time类型 if not isinstance(value, datetime): return value # now_time = datetime.now() # navie time类型 now_time = now() # django内置的获取当前aware time类型 timestamp = (now_time - value).total_seconds() # 将datatime类型转化成秒 if timestamp < 60: return '刚刚' elif timestamp <= 60 * 60: return "%s分钟前" % (int(timestamp / 60)) # 转成整数 elif timestamp <= 60 * 60 * 24: return "%s小时前" % (int(timestamp / (60 * 60))) elif timestamp <= 60 * 60 * 24 * 30: return "%s天前" % (int(timestamp / (60 * 60 * 24))) return value.strftime('%Y/%m/%d %H:%M')