zoukankan      html  css  js  c++  java
  • django-区分时区的时间类型

    # 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')




  • 相关阅读:
    ActiveX控件开发 C#
    sql server中新增一条数据后返回该数据的ID
    数据库设计之用户-角色-权限分配
    C#面向对象基础
    单片机通讯协议
    MSDN上的异步socket 服务端例子
    文件操作
    socket+select模型
    HSV颜色模型
    视觉软件需要考虑的10个方面
  • 原文地址:https://www.cnblogs.com/tangpg/p/9298641.html
Copyright © 2011-2022 走看看