Java 自动补全日期 EChartst折线图数据处理

Java 自动补全日期 EChartst折线图数据处理

业务需求

需要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,最后返回新的集合就行。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值