遍歷兩個時間節點的日期
阿新 • • 發佈:2018-12-07
背景
做個圖表的下鑽功能,首先是從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());
}