最近工作用遇到处理EChartst折线图数据处理,要求按月,按天统计,没有数量的月份、日期也要有显示的需求,个人觉得有必要记录一下:
需要精确到日:calendar10.add(Calendar.DAY_OF_MONTH, 1 );
需要精确到月:calendar10.add(Calendar.MONTH, 1 );
格式:SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
下面直接上代码:
/** * list为日期list。begin将开始的日期传入(月份),daySub为开始到结束日期之间的总月份 * @param list * @param begin * @param daySub * @return */ public static List<String> completionMonth(List<String> list ,String begin , int daySub){ ArrayList<String> dateResult = new ArrayList<String>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); //字符串转化为时间 Calendar calendar10 = Calendar.getInstance(); Calendar calendar5 = Calendar.getInstance(); //循环处理日期数据,把缺失的日期补全。10是时间段内的天数,5是要处理的日期集合的天数 try { Date date = sdf.parse(begin); calendar10.setTime(date); for(int curr = 0 ; curr < daySub ; curr++){ boolean dbDataExist = false; int index = 0; for(int i = 0 ; i < list.size() ; i++){ Date date2 = sdf.parse(list.get(i)); calendar5.setTime(date2); 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.MONTH, 1 ); } return dateResult; } catch (ParseException e) { e.printStackTrace(); } return null; }
---------------------impl业务层引用--------------------------------
public Map<String, Integer> consumeQuantityGroupByMonthOfYear(QuantityGroupByMonthOfYearQueryDTO queryParams) { //测试数据 2022 //queryParams.setYearOrMonth("2022"); LocalDate fristDate=LocalDate.of(Integer.parseInt(queryParams.getYearOrMonth()), 1, 1); LocalDate lastDate=LocalDate.of(Integer.parseInt(queryParams.getYearOrMonth()), 12, 31); Date startDate = DateUtil.parse(fristDate.toString()); Date endDate = DateUtil.parse(lastDate.toString()); List<Map<String, Integer>> list =quantityReportMapper.textileQuantity_Month_Optimize(queryParams.getCompanyCode(),String.valueOf(queryParams.getDeptId()), Constants.TEXTILE_ROTATION_STATE_26, startDate, endDate); //要加判断 Map<String, Integer> dataMap=new TreeMap<>(); if(list.size()>0){ for (Map<String, Integer> integerMap : list) { dataMap.put(String.valueOf(integerMap.get("starttime")),new Integer(String.valueOf(integerMap.get("quantity")))); } } //组装填充日期 List<String> stringList=completionMonth(new ArrayList<>(),fristDate.toString(),12); Map<String, Integer> copyListMap=new TreeMap<>(); for (String s : stringList) { copyListMap.put(s,0); } //map合并 dataMap.forEach((k, v) -> copyListMap.merge(k, v, (v1, v2) -> v2)); return copyListMap; }
-----------------效果图