最近碰到一个需求,按日、按周、按月分别统计最近时间段内的数据统计
写的比较匆忙,所以用的方法、写的逻辑会混乱一些,望见谅,先记录一下,如果有更好的方法会更新在下面
1、获取前一周每天的日期
// 按日统计
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
for (int i = 0; i < 7; i++) {
Date date = DateUtils.addDays(new Date(), -i);
String formatDate = format.format(date);
System.out.println(formatDate);
}
结果:
2、获取最近四周的起止日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
LocalDate date = LocalDate.now();
if (date.getDayOfWeek().getValue() == 0){
date = date.minus(1, ChronoUnit.DAYS);
}
// 本周一日期
date = date.minus(date.getDayOfWeek().getValue() - 1, ChronoUnit.DAYS);
LocalDate localSunday = date.minus(date.getDayOfWeek().getValue() - 7, ChronoUnit.DAYS);
System.out.println(date + "****" + localSunday);
for (int i = 0; i < 3; i++) {
date = date.minus(date.getDayOfWeek().getValue() + 6, ChronoUnit.DAYS);
LocalDate lastSunday = date.minus(date.getDayOfWeek().getValue() - 7, ChronoUnit.DAYS);
System.out.println(date + "****" + lastSunday);
}
结果:
3、获取最近六个月的起止日期
// 按月统计
LocalDate date = LocalDate.now();
LocalDate firstDate = date.withDayOfMonth(1);
// 计算本月
LocalDate nextFirstDay = firstDate.minus(-1, ChronoUnit.MONTHS);
System.out.println(firstDate + "****" + nextFirstDay);
for (int i = 0; i < 5; i++) {
firstDate = firstDate.minus(1,ChronoUnit.MONTHS);
LocalDate endDate = firstDate.minus(-1,ChronoUnit.MONTHS);
System.out.println(firstDate + "****" + endDate);
}
最后一个有的扯… 本来想着拿到本月的最后一天,后来想拿到第二个月的第一天,最后在数据库中按日期来检索的时候直接小于第二个月第一天(2022-12-01 00:00:00)就可以了…