1. 程式人生 > >遍歷兩個時間節點的日期

遍歷兩個時間節點的日期

背景

做個圖表的下鑽功能,首先是從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()); }