获取两个日期之间的日期集合:半小时一个值。
一般用于时间趋势图的汇总处理
1 pom:hutool工具
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
2 方法
/**
* 获取时间区间 每半小时的集合
* @param start 起始时间
* @param end 截至时间
*/
public static Map<String, Integer> trendMap(Date start, Date end){
// 获取两个日期之间的日期集合。DateField.HOUR:每小时一个值。
// 当设置为天时:获取到的集合为两个日期之间的所有天数集合
List<DateTime> list = DateUtil.rangeToList(start, end, DateField.HOUR);
Map<String, Integer> map = new LinkedHashMap<>();
boolean flag = Boolean.TRUE;
for (DateTime dateTime : list) {
if(flag){
// 去掉第一个:list长度为25。
flag = Boolean.FALSE;
continue;
}
// 遍历时:往前推半小时
DateTime offset = DateUtil.offset(dateTime, DateField.MINUTE, -30);
map.put(DateUtil.format(offset, DatePattern.NORM_DATETIME_FORMAT), 0);
// 当前遍历项
map.put(DateUtil.format(dateTime, DatePattern.NORM_DATETIME_FORMAT), 0);
}
return map;
}
3 再加一个方法:
获取当前时间最近的整半小时,如13:30,16:00,09:00,04:30等
floor:向下取整,获取当前时间前半小时
ceil:向上取整,获取当前时间后半小时
/**
* 获取当前时间最近的半小时
*/
public static DateTime endDate(){
DateTime end = DateUtil.date();
int minute = DateUtil.minute(end);
Double floor = Math.floor(minute / 30.0) * 30;
end.setField(DateField.MINUTE, floor.intValue());
end.setField(DateField.SECOND, 0);
end.setField(DateField.MILLISECOND, 0);
return end;
}
碰见多次此类项目需求,做个记录……