zoukankan      html  css  js  c++  java
  • 统计每天的数据 无数据也要显示日期程序解决方法

      最近项目中遇到分组查询数据,按日期显示,如果那个日期没有数据,也要把日期显示出来.

      有两个方案:1)在数据库建一个用于所有日期的表,然后让查询结果与之关联。

           2)在程序中填充。

    对于方案一的话,可以写定时任务或者存储过程将日期写入相应的日期表,注意这个日期表只是为了查询的时候,带出数据为空的数据中的日期。以空间换取时间(简单实现)

    方案二是:利用一次循环,将日期直接填充到list中,

      具体原理是:start比对原数组,如果有就添加到新数组,没有就填充空数据到新数组,直到结束

    package test;
    
    import java.util.Date;
    
    public class Dog {
        private    String name;
        private  Date birthday;
            
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        
    
    }

    具体实现如下

    关键代码如下

    public static  List<Dog> addDayForNull(List<Dog> oldList,Date start,Date end){
            long n=getDateDay(start,end);
            ArrayList<Dog> newList=new ArrayList<Dog>();
            int num=oldList.size();
            int temp=0;
            for(int i=0;i<n;i++){
                if(temp < num){
                    //如果开始日期小于当前记录日期则增加空白数据
                    if(start.compareTo(oldList.get(temp).getBirthday()) < 0){
                    Dog dog=getNewDag(start);
                    newList.add(dog);
                }
                if(start.compareTo(oldList.get(temp).getBirthday()) == 0){//原数据加入
                    newList.add(oldList.get(temp));
                    temp++;
                }
                }else if(temp >= num && start.compareTo(end) <= 0){//加入空数据直到结束时间
                    Dog dog=getNewDag(start);
                    newList.add(dog);
                                
                }
                //开始时间向前加一天
                start=addDateOneDay(start);
                
            }
            
            return newList;
            
            


      

     
    public static Date addDateOneDay(Date date) {
            if (null == date) {
                return date;
            }
            Calendar c = Calendar.getInstance();
            c.setTime(date);   //设置当前日期
            c.add(Calendar.DATE, 1); //日期加1天
    //     c.add(Calendar.DATE, -1); //日期减1天
            date = c.getTime();
            return date;
        }
    学习的时间不一定要特定安排
  • 相关阅读:
    Crazyflie 2.0 System Architecture
    HDU 4856 Tunnels(BFS+状压DP)
    scp报错:Host key verification failed. REMOTE HOST IDENTIFICATION HAS CHANGED!
    HDU 4175 Class Schedule (暴力+一点dp)
    正則表達式
    匿名訪问之(一)web application级别
    Android UI布局之TableLayout
    cocos2d-x-3.3rc2-003 cocos中的引用计数和自己主动释放池
    一步一步跟我学习hadoop(7)----hadoop连接mysql数据库运行数据读写数据库操作
    hdu Swipe Bo(bfs+状态压缩)错了多次的题
  • 原文地址:https://www.cnblogs.com/zhongzheng123/p/5230707.html
Copyright © 2011-2022 走看看