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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值