Java自动补全日期,空数据为0

先说下我的个人需求

需要echarts做一个折线图

查询出结果后放到图中发现没有数据的日期并没有那天的数据,图有点不搭。

开始找解决办法,从sql上解决,找了很多之后发现大同小异都是需要建表来关联查询。

那就换种办法,从代码上解决吧。

一开始的数据是这样的

[{"date":"2018-03-26","count":0,"id":null},{"date":"2018-03-29","count":0,"id":null},{"date":"2018-03-30","count":1,"id":null},{"date":"2018-03-31","count":2,"id":null}]

自己定义了list将日期取出,开始补全日期。

写了个方法方便自己调用,list为日期list。begin将开始的日期传入,daySub为开始到结束日期之间的总天数,返回的是补全后的日期。

public static List<String> completionDate(List<String> list ,String begin , int daySub){
      ArrayList<String> dateResult = new ArrayList<String>();
      //时间增加一天
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
      Calendar yesterday = Calendar.getInstance();
      yesterday.add(Calendar.DAY_OF_MONTH, 1);
      String dateStr = sdf.format(yesterday.getTime());
      
      //日期比较(求差多少天),时间也可以比较
      Calendar now = Calendar.getInstance();
    
      //字符串转化为时间
      Calendar calendar10 = Calendar.getInstance();
      Calendar calendar5 = Calendar.getInstance();
      //循环处理日期数据,把缺失的日期补全。10是时间段内的天数,5是要处理的日期集合的天数
      try {
           Date date = sdf.parse(begin);
           calendar10.setTime(date);
      } catch (ParseException e) {
          e.printStackTrace();
      }
      for(int curr = 0 ; curr < daySub ; curr++){
          
          boolean dbDataExist = false;
          int index = 0;
          for(int i  = 0 ; i < list.size() ; i++){
              try {
                  Date date2 = sdf.parse(list.get(i));
                  calendar5.setTime(date2);
              } catch (ParseException e) {
                  e.printStackTrace();
              }
              if(calendar10.compareTo(calendar5) == 0){
                  dbDataExist  = true;
                  index = i;
                  break;
              }
          }
          if(dbDataExist){
              dateResult.add(list.get(index));
          }else{
              dateResult.add(sdf.format(calendar10.getTime()));
          }
          //还原calendar10
          calendar10.add(Calendar.DAY_OF_MONTH, 1 );
      }
      
    	return dateResult;
    }

补全的日期list到手,接下来要将原来不存在的日期的数值补充为0。实现也很简单,简单说下我的。

先定义map将原来的日期和值放进去,得到新的补全后list后遍历通过map取值,如果为空就是添加的日期,将value赋值为0,最后返回新的集合就行。

有问题留言。

猜你喜欢

转载自blog.csdn.net/u012998306/article/details/79988657