java 数据一年一月一周一天数据补零工具类

    相信各位和前端对接口时,总会碰到这样的情况,返回值  数据库查出来为空,然而前端又需要你把中间断掉的数据补零

我们产生数据,不可能每月都有产生。

就搞了一个工具类,

    public static List<Map<String, Object>> toDataHour(Long time, Integer type,List<Map<String, Object>> listData) {
    	//开始时间
        
        //新数据
        List<Map<String, Object>> newData = new  ArrayList<Map<String, Object>>();
        //int startYear = calStartDataUtil.get(Calendar.YEAR);
        String company = "";
        int size = 0;
    	if(type == 0) {
    		//一年多少月
    		size = 12;
    		company = "月";
    	}else if(type == 1) {
    		Calendar calStartDataUtil = Calendar.getInstance();
            calStartDataUtil.setTimeInMillis(time);
    		calStartDataUtil.add(Calendar.MONTH, 1);
    		calStartDataUtil.set(Calendar.DAY_OF_MONTH, 0);
    		//一月多少天
            size = calStartDataUtil.get(Calendar.DATE);
            company = "日";
    	}else {
    		//一天多少小时
    		size = 24;
    	}
    	for (int i = 1; i <= size; i++) {
			Map<String, Object> map = new HashMap<String, Object>();
			//数据
			map.put("value", 0);
			if(!CollectionUtils.isEmpty(listData )){
                for (Map<String, Object> data : listData) {
                    //获取时间
                    Integer times = (Integer) data.get("name");
                    if(times != null && times.intValue() == i) {
                        map.put("value",data.get("value"));
                        break;
                    }
                }
			}
			map.put("name", i+company);
			newData.add(map);
		}
    	return newData;
    }

入参:listData   数据库查询参数  

time:时间戳   年月日范围内的都行

tpye:0 年  1月  2天

数据库查询参数  比如  你查某一年数据   name的值  就为  月份

查某一月的数据    name的值  就为月内的天

查某天的数据  name的值就为小时  可自行修改;

当然上述存在一定局限性,只能查询一年内的数据,无法选择时间段内的数据;

 

根据上述版本改良了一个  近一年的数据补零工具

public List<Map<String, Object>> toDataNearlyYear(List<Map<String, Object>> listData,Long time){
    	//Date date = new Date();//获取当前时间    
    	List<Map<String, Object>> newData = new  ArrayList<Map<String, Object>>();
    	Calendar calendar = Calendar.getInstance(); 
    	calendar.setTimeInMillis(time);
    	int sunYear = calendar.get(Calendar.YEAR);//获取当前年份
        int sunMonth = calendar.get(Calendar.MONTH) + 1;//获取当前月份
        int sunDay = calendar.get(Calendar.DATE)+1;//获取当日
    	calendar.add(Calendar.YEAR, -1);//当前时间减去一年,即一年前的时间    
    	calendar.add(Calendar.MONTH, +1);
    	calendar.add(Calendar.DATE, +1);
    	int monYear = calendar.get(Calendar.YEAR);//获取过去年份
        int monMonth = calendar.get(Calendar.MONTH) + 1;//获取过去月份
        int monDay = calendar.get(Calendar.DATE);//获取当日
        //如果当前年不等于近一年的开始时间   年不相等
        //说明出现跨年现象
        if(sunYear != monYear) {
            //把去年的开始月份当初起始时间
            //结束月写死为12月进行第一次循环
        	for (int i = monMonth; i <= 12 ; i++) {
        		Map<String, Object> map = new HashMap<String, Object>();
                //添加默认值
        		map.put("value", 0);
                //格式化时间 2019-1  月份不补零 从去年开始
                //可自行判断小于10补零
				String str = monYear + "-" + i;
				putValue(listData, map, str);
				map.put("name", str);
				newData.add(map);
			}
            //把今年的结束月当成 结束条件
            //从一月开始
        	for (int i = 1; i <= sunMonth ; i++) {
        		Map<String, Object> map = new HashMap<String, Object>();
        		map.put("value", 0);
                //今年开始
				String str = sunYear + "-" + i;
				putValue(listData, map, str);
				map.put("name", str);
				newData.add(map);
			}
        }else {
            //年相等那么没有出现跨年的现象   直接返回1-12就好
        	for (int i = 1; i <= 12 ; i++) {
        		Map<String, Object> map = new HashMap<String, Object>();
        		map.put("value", 0);
				String str = monYear + "-" + i;
				putValue(listData, map, str);
				map.put("name", str);
				newData.add(map);
			}
        }
        return newData;
    }

private void putValue(List<Map<String, Object>> listData, Map<String, Object> map, String str) {
        if(CollectionUtils.isEmpty(listData )){
			return;
		}
		for (Map<String, Object> map2 : listData) {
			if(str.equals((String)map2.get("name"))){
				map.put("value", map2.get("value"));
				break;
			}
		}
	}

import org.springframework.util.CollectionUtils;

关于近一月的就没做了

 

获取一周的数据

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
private static  final String[] WEK = {"","一","二","三","四","五","六","日"};
/**
     * 获取当前周的数据
     */
    public static List<Map<String, Object>> toDataWek(Long time,List<Map<String, Object>> listData) {
    	//开始时间
        Calendar calStartDataUtil = Calendar.getInstance();
        calStartDataUtil.setTimeInMillis(time);
        calStartDataUtil.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        //开始时间
        Long fristDay = calStartDataUtil.getTimeInMillis();
        //calStartDataUtil.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        //结束时间
        //Long endDay = calStartDataUtil.getTimeInMillis();
        //新数据
        List<Map<String, Object>> newData = new  ArrayList<Map<String, Object>>();
        //int startYear = calStartDataUtil.get(Calendar.YEAR);
        String company = "周";
        int size = 0;
    	for (int i = 1; i <= 7; i++) {
    		//格式化时间
            String format = sdf.format(new Date(fristDay));
			Map<String, Object> map = new HashMap<String, Object>();
			//数据
			map.put("value", 0);
			for (Map<String, Object> data : listData) {
				//获取时间
				String times = (String) data.get("name");
				if(times != null && format.equals(times)) {
					map.put("value",data.get("value"));
					break;
				}
			}
			map.put("name", company+WEK[i]);
			newData.add(map);
            //加一天循环7次  从周一到周末
			fristDay = fristDay + 86400000L;
		}
    	return newData;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值