生成当天的开始时间和结束时间

private String startTime() {
    LocalDate now = LocalDate.now();  // 获取当前日期
    LocalDate startDay = now.plusDays(0);  // 将当前日期加上 0 天,得到今天
    LocalTime min = LocalTime.MIN;  // 获取一天中最小的时间,即 00:00:00
    LocalDateTime start = LocalDateTime.of(startDay, min);  // 构造当天开始时刻LocalDateTime 对象
    return start.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));  // 格式化 LocalDateTime 为字符串并返回
}

private String endTime(){
    LocalDate now = LocalDate.now();
    LocalDate endDay = now.plusDays(2);
    LocalTime max = LocalTime.MAX;
    LocalDateTime end = LocalDateTime.of(endDay, max);
    return end.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
  1. 获取当前日期:

    • LocalDate.now() 返回当前系统的日期,不包含时间和时区信息。
    • LocalDate 类表示日期,如 2023-08-27。
  2. 计算今天的日期:

    • now.plusDays(0) 将当前日期加上 0 天,实际上就是获取今天。
    • 这里使用 plusDays(0) 主要是为了保持代码的一致性和清晰性,实际上 now 和 startDay 的值是相同的。
  3. 获取一天的最小时间:

    • LocalTime.MIN 表示一天中最小的时间,即 00:00:00。
  4. 构造当天开始时刻的 LocalDateTime 对象:

    • LocalDateTime.of(startDay, min) 创建一个 LocalDateTime 对象,表示当天的开始时刻,即 startDay 日期加上 min 时间。
  5. 格式化 LocalDateTime 为字符串:

    • DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") 创建一个日期时间格式器,用于将 LocalDateTime 对象格式化为字符串。
    • "yyyy-MM-dd HH:mm:ss" 是日期时间的格式模式,其中:
      • yyyy 表示四位数的年份;
      • MM 表示月份;
      • dd 表示月份中的天数;
      • HH 表示小时(24小时制);
      • mm 表示分钟;
      • ss 表示秒。
    • start.format(formatter) 将 LocalDateTime 对象 start 格式化为字符串,并返回。

示例输出

如果当前日期是 2023 年 8 月 27 日,该方法将返回 "2023-08-27 00:00:00"

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!针对您的问题,我可以给出以下的思路和建议: 1. 首先,我们需要定义一个时间段的数据结构,用于表示时间段的开始时间结束时间,可以使用Java中的LocalDateTime类进行表示; 2. 然后,我们需要定义一个禁用时间区间的数据结构,用于表示禁用时间段的开始时间结束时间; 3. 接下来,我们可以先获取当前时间所在的日期,然后根据起始时间结束时间生成一个完整的时间段; 4. 最后,我们可以遍历所有的禁用时间区间,排除掉与当前时间段重叠的部分,并将不重叠的时间段添加到结果集中。 下面是一个简单的Java程序,用于实现上述的功能: ``` import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; public class TimeUtil { static class TimeRange { LocalDateTime start; LocalDateTime end; public TimeRange(LocalDateTime start, LocalDateTime end) { this.start = start; this.end = end; } public LocalDateTime getStart() { return start; } public void setStart(LocalDateTime start) { this.start = start; } public LocalDateTime getEnd() { return end; } public void setEnd(LocalDateTime end) { this.end = end; } } static class DisabledRange { LocalDateTime start; LocalDateTime end; public DisabledRange(LocalDateTime start, LocalDateTime end) { this.start = start; this.end = end; } public LocalDateTime getStart() { return start; } public void setStart(LocalDateTime start) { this.start = start; } public LocalDateTime getEnd() { return end; } public void setEnd(LocalDateTime end) { this.end = end; } } public static List<TimeRange> getAvailableTimeRanges(LocalDateTime start, LocalDateTime end, List<DisabledRange> disabledRanges) { List<TimeRange> availableRanges = new ArrayList<>(); LocalDateTime currentDate = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0); TimeRange currentRange = new TimeRange(currentDate.withHour(start.getHour()).withMinute(start.getMinute()), currentDate.withHour(end.getHour()).withMinute(end.getMinute())); for (DisabledRange disabledRange : disabledRanges) { if (isTimeOverlap(currentRange.start, currentRange.end, disabledRange.start, disabledRange.end)) { if (currentRange.start.isBefore(disabledRange.start)) { availableRanges.add(new TimeRange(currentRange.start, disabledRange.start)); } if (currentRange.end.isAfter(disabledRange.end)) { currentRange = new TimeRange(disabledRange.end, currentRange.end); } else { return availableRanges; } } } availableRanges.add(currentRange); return availableRanges; } public static boolean isTimeOverlap(LocalDateTime start1, LocalDateTime end1, LocalDateTime start2, LocalDateTime end2) { if (start1.isEqual(start2) || end1.isEqual(end2)) { return true; } if (start1.isBefore(start2) && end1.isAfter(start2)) { return true; } if (start1.isAfter(start2) && start1.isBefore(end2)) { return true; } return false; } } ``` 这个程序中,getAvailableTimeRanges方法用于获取当前日期下可用的时间段,isTimeOverlap方法用于判断两个时间段是否重叠。您可以根据实际需求进行调整和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值