使用LocalDateTime计算一周开始日期和一周结束日期

一、一周开始时间

public static LocalDateTime getBeginTime(LocalDate now) {
        return now.minusDays(now.getDayOfWeek().getValue() - 1).atStartOfDay();
    }

解释说明:

  1. now.getDayOfWeek().getValue():获取当前日期 now 是一周中的第几天,返回的是一个整数,1 表示星期一,2 表示星期二,以此类推,7 表示星期日。
  2. minusDays 是 Java 8 中 LocalDate 类的方法之一,用于对日期进行减法操作。具体而言,minusDays 方法接受一个表示天数的参数,并返回一个新的 LocalDate 对象,该对象表示在原日期的基础上减去指定的天数后的日期。
  3. now.minusDays(now.getDayOfWeek().getValue() - 1):将当前日期减去当前是一周中的第几天再减去 1天,这样就得到了当前周的第一天的日期。例如,如果今天是星期三(3),那么这个操作会将日期减去 2 天,使得当前日期变为当前周的第一天,也就是星期一。
  4. 代码中的.atStartOfDay():将得到的日期转换为当天的开始时间,即将时、分、秒和纳秒等时间部分设置为零。

二、一周的结束时间

 public static LocalDateTime getEndTime(LocalDate now) {
        return LocalDateTime.of(now.plusDays(8 - now.getDayOfWeek().getValue()), LocalTime.MAX);
    }

解释说明

  1. now.getDayOfWeek().getValue():获取当前日期 now 是一周中的第几天,返回的是一个整数,1 表示星期一,2 表示星期二,以此类推,7 表示星期日。
  2. now.plusDays(8 - now.getDayOfWeek().getValue()):将当前日期加上一个值,使其变为当前周的最后一天。8 - now.getDayOfWeek().getValue() 的结果表示距离当前日期最近的星期日的天数。例如,如果今天是星期三(3),那么 8 - 3 等于 5,就是说需要再加 5 天,才能到达本周的最后一天,即星期日。
  3. LocalDateTime.of(…, LocalTime.MAX):使用 LocalDateTime.of 方法将日期和时间组合,构建一个新的 LocalDateTime 对象。在这里,我们将日期设为计算得到的当前周的最后一天,而将时间设为当天的最后一刻,即 LocalTime.MAX,表示23:59:59.999999999。
  4. 注: LocalDateTime.of 是 java.time.LocalDateTime 类的一个静态工厂方法,用于创建一个 LocalDateTime 对象。这个方法的目的是将年、月、日、时、分等时间单位组合成一个完整的日期时间对象。

源码如下:

/* Obtains an instance of LocalDateTime from a date and time.
Params:
date – the local date, not null time – the local time, not null
Returns:
the local date-time, not null*/

public static LocalDateTime of(LocalDate date, LocalTime time) {
        Objects.requireNonNull(date, "date");
        Objects.requireNonNull(time, "time");
        return new LocalDateTime(date, time);
    }

LocalTime.MAX在源码中的值:

 public static final LocalTime MAX;
 
 static {
        for (int i = 0; i < HOURS.length; i++) {
            HOURS[i] = new LocalTime(i, 0, 0, 0);
        }
        MIDNIGHT = HOURS[0];
        NOON = HOURS[12];
        MIN = HOURS[0];
        MAX = new LocalTime(23, 59, 59, 999_999_999);
    }

三、饭后补给

  1. LocalTime: 是 Java 8 中 java.time 包中的一个类(下边的两个也是)。用于表示时间,但不包括日期。它表示一天中的一个时刻,包含时、分、秒和纳秒等信息,但不包含日期信息
  2. LocalDate: 表示日期,但没有时间部分。它包含年、月、日信息,但没有时、分、秒和纳秒等时间信息。LocalDate 可以用于表示像生日、事件日期等只关注日期而不关注具体时间的情境。
  3. LocalDateTime: 表示日期和时间,包含年、月、日、时、分、秒和纳秒等信息。LocalDateTime 适用于需要同时处理日期和时间的场景,比如记录事件的发生时间。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值