背景
做个图表的下钻功能,首先是从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());
}