zoukankan      html  css  js  c++  java
  • 【Django】:时间处理

    时间格式化

      做博客后台时,需要经常对数据库里面的时间格式(2017-02-17 02:10:44.308638)进行处理,格式化成自己想要的时间(列如年月日),下面就来记录下如何对时间进行处理

    1、时间进行格式化分组

    class Article(models.Model):
        nid = models.BigAutoField(primary_key=True)
        title = models.CharField(verbose_name='文章标题', max_length=128)
        summary = models.CharField(verbose_name='文章简介', max_length=255)
        read_count = models.IntegerField(default=0)
        comment_count = models.IntegerField(default=0)
        up_count = models.IntegerField(default=0)
        down_count = models.IntegerField(default=0)
        create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
    
        blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid')
        category = models.ForeignKey(verbose_name='文章类型', to='Category', to_field='nid', null=True)
    
        type_choices = [
            (1, "Python"),
            (2, "Linux"),
            (3, "OpenStack"),
            (4, "GoLang"),
        ]
    
        article_type_id = models.IntegerField(choices=type_choices, default=None)
    
        tags = models.ManyToManyField(
            to="Tag",
            through='Article2Tag',
            through_fields=('article', 'tag'),
        )
    models.py DateTimeField类型

    处理函数:

    def home(request, site):
        """
        博主个人首页
        :param request:
        :param site: 博主的网站后缀如:http://xxx.com/wupeiqi.html
        :return:
        """
    
        # 生成三个字段nid,num,ctime 日期按照%Y-%m年月进行分组
        date_list = models.Article.objects.raw(         # raw执行原生SQL语句
            'select nid, count(nid) as num,strftime("%Y-%m",create_time) as ctime from repository_article group by strftime("%Y-%m",create_time)')
        # date_format(create_time,"%Y-%m")      # 上边是sqllist的方式,mysql把strftime更换为date_format即可
    
        # date_list 提取数据的方法
        for item in date_list:
            print(item.nid,item.num,item.ctime)
        # 4 1 2017 - 01
        # 13 8 2017 - 02
        # 7 1 2017 - 03

    把日期格式,进行年月分组,并进行统计每组包含的个数

    2、根据时间格式进行检索匹配

    def filter(request, site, condition, val):
         ---snip---
    
        elif condition == 'date':
            # mysql的执行方法
            # article_list = models.Article.objects.filter(blog=blog).extra(
            # where=['date_format(create_time,"%%Y-%%m")=%s'], params=[val, ]).all()
            
            # extra 构造额外的查询条件或者映射,如:子查询
            article_list = models.Article.objects.filter(blog=blog).extra(   # val 传入的日期参数 如:2017-02
                where=['strftime("%%Y-%%m",create_time)=%s'], params=[val, ]).all()    # python两个%表示一个%的字符 var对应%s      
            # 上面语句等同于 select * from article where strftime("%Y-%m",create_time)=2017-02

    Article数据表中检索时间格式为2017-02的所有匹配的数据对象

  • 相关阅读:
    javascript调用applet
    mysql“Access denied for user 'root'@'localhost'”问题的解决
    VS2010 加载Dll文件
    预处理符号
    什么是lib文件,lib和dll的关系如何[转]
    git常用命令
    VC项目配置基础[转]
    [转]Linux ftp命令的使用方法
    [转]JavaScript创建Applet 标签的属性介绍 以及 Applet调用JavaScript
    When you publish a workflow in Microsoft Dynamics CRM 4.0 after you install Update Rollup 2, you receive Error message
  • 原文地址:https://www.cnblogs.com/lianzhilei/p/6437475.html
Copyright © 2011-2022 走看看