java日期填充、Java 自动补全日期、 EChartst折线图数据处理

最近工作用遇到处理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;
}

-----------------效果图

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值