按日、按周、按月获取最近的日期

最近碰到一个需求,按日、按周、按月分别统计最近时间段内的数据统计
写的比较匆忙,所以用的方法、写的逻辑会混乱一些,望见谅,先记录一下,如果有更好的方法会更新在下面
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)就可以了…

猜你喜欢

转载自blog.csdn.net/s990420/article/details/128053681