遍历两个时间节点的日期

版权声明:本文为博主原创文章,欢迎大家交流 https://blog.csdn.net/he_min/article/details/81351991

背景

做个图表的下钻功能,首先是从mongoDB中获取处一段时间的数据,并按照小时的顺序进行排列,点击图中的某一个时刻会把该时刻的信息返回来,比如说:7月1日到7月30日,每天的1点到24点的数据汇总起来,进行展示,为了更详细的了解每个小时内访问数量的分布,需要进行图表的下钻,但是在获取数据的时候出现一个问题:获取一天数据的时候显示正常,但是如果跨天,跨月,跨年等就会出现下钻出来的数据比整个月的都多,于是就进行了详细的分析,mongodb的mapreduce 查询,并不是那么的智能,他会把这段时间内,每个小时的数据都进行统计。

举个例子

抽取2018-07-01到2018-07-31的统计数据,他会把1-24小时的数据进行统计,如果想看1点到2点的数据就会返回1号到31号每天1点到2点的数据的汇总。

解决问题

通过上述的描述,已经知道问题的根本,一开始,想的是分别做处理,跨年的,跨月的,跨日的,都做一次,但是仔细一想,不就是一天天的遍历吗!
知道问题后就简单了,使用java的日历相关的库,立马就解决了,部分代码如下:

                Calendar tempStart = Calendar.getInstance();
                DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                Date bDate = null; 
                Date eDate = null; 
                try {
                    bDate = format.parse(startDate.split(" ")[0]);
                    eDate = format.parse(endDate.split(" ")[0]);
                    tempStart.setTime(bDate);
                    while(bDate.getTime()<=eDate.getTime()) {
                        //处理数据并合并
                        String current = format.format(bDate);
                        tempStart.add(Calendar.DAY_OF_YEAR, 1);
                        bDate = tempStart.getTime();
                    }
                    result = finalResult;
                } catch (Exception e) {
                    log.error("日期格式转换错误"+e.getMessage());
                }

猜你喜欢

转载自blog.csdn.net/he_min/article/details/81351991