有时候分页查询时,时间跨度太大,会影响接口或数据库性能,我们可以减少时间跨度,进行多次查询来实现。
/**
* 获取一段时间内的分割天数list,每dayNum天一分割。
* 7天为例:2017-01-01到2017-01-15可分割为[2017-01-01,2017-01-07]和[2017-01-08,2017-01-14]和[2017-01-15,2017-01-15]
*
* @param startDateStr
* @param endDateStr
* @param dayNum 分割天数,必须为正整数
* @param pattern 时间字符串格式"yyyy-MM-dd" or "yyyyMMdd" or "yyyy/MM/dd"
* @return
* @throws ParseException
* @author EX-LISHENG001
*/
public static List<Map<String,Object>> getDateList(String startDateStr,String endDateStr, int dayNum, String pattern) throws ParseException{
if(dayNum < 1){
return null;
}
List<Map<String,Object>> dateList = new ArrayList<Map<String,Object>>();
SimpleDateFormat df = new SimpleDateFormat(pattern);
Date startDate = df.parse(startDateStr);
Date endDate = df.parse(endDateStr);
Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
while(true){
Map<String,Object> dateMap = new HashMap<String,Object>();
cal.add(Calendar.DATE, dayNum-1);
if(cal.getTime().getTime() < endDate.getTime()){
dateMap.put("startDate", df.format(startDate));
dateMap.put("endDate", df.format(cal.getTime()));
dateList.add(dateMap);
}else{
dateMap.put("startDate", df.format(startDate));
dateMap.put("endDate", df.format(endDate));
dateList.add(dateMap);
break;
}
cal.add(Calendar.DATE, 1);
startDate = cal.getTime();
}
return dateList;
}