因为最近的业务系统需求,前端有两个时间选择框,分别为startTime和endTime,用户展示一段时间内的折线图,但是如果用户选择的时间段太长,折线图时间轴太密集,展示效果十分不佳,于是我使用java代码书写了一个时间工具类,可以返回当前日期或指定日期的前N天的日期集合,如果传入的开始时间和结束时间间隔太大,还可以自动适应时间。
废话不多说,直接上代码。
代码语言:javascript复制/**
* 用户可以传入startTime或endTime任意一个或两个,也可以不传入
* 当传入的时间间隔太长时,默认返回最近的nday
* plus: StringUtils为org.apache.commons.lang.StringUtils,读者也可以手动判断""和null
*/
public List<String> getNDaysList(String startTime, String endTime, int nday) {
int ndaycurrent = nday - 1;
// 返回的日期集合
List<String> days = new ArrayList<String>();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE,-ndaycurrent);
Date start = calendar.getTime();
Date end = new Date();
if (StringUtils.isNotBlank(startTime) && StringUtils.isBlank(endTime)){
//如果用户只选择了startTime,endTime为null,startTime 10的日期
start = dateFormat.parse(startTime);
Calendar calendar1 = Calendar.getInstance();
calendar1.setTime(start);
calendar1.add(Calendar.DATE, ndaycurrent);
end = calendar1.getTime();
}else if(StringUtils.isBlank(startTime) && StringUtils.isNotBlank(endTime)){
//如果用户只选择了endTime,startTime为null,endTime - 10的日期
end = dateFormat.parse(endTime);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTime(end);
calendar2.add(Calendar.DATE, -ndaycurrent);
start = calendar2.getTime();
}else if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)){
//如果用户选择了startTime和endTime,判断endTime - startTime两个日期是否超过了ndaycurrent,超过返回最近nday天记录
Date start1 = dateFormat.parse(startTime);
Date end1 = dateFormat.parse(endTime);
int a = (int) ((end1.getTime() - start1.getTime()) / (1000*3600*24));
if (a <= ndaycurrent) {
//如果小于等于n天
start = dateFormat.parse(startTime);
end = dateFormat.parse(endTime);
}
}
//如果超过了ndaycurrent天,就是默认的start和end
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(start);
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(end);
tempEnd.add(Calendar.DATE, 1);// 日期加1(包含结束)
while (tempStart.before(tempEnd)) {
days.add(dateFormat.format(tempStart.getTime()));
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
} catch (ParseException e) {
e.printStackTrace();
}
return days;
}