开发者社区 问答 正文

检查startTime和endTimer是否在两次之间

我正在从事一个用于预订场地的项目。目的是如果在此期间场地已在预订,则不允许预订

if (!alreadyBookedSet.isEmpty()) {

        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");

        logger.debug("Check if the venue is already booked on this date" + booking.getBookingDate());
        for (Booking alreadyBooked : alreadyBookedSet) {
            String bookingDate = alreadyBooked.getBookingDate();

            if (bookingDate.equals(booking.getBookingDate())) {

                String alreadyBookedTimeStart = alreadyBooked.getTimeStart();
                Date alreadyBookedTimeStartDate = simpleDateFormat.parse(alreadyBookedTimeStart);

                String alreaydBookedTimeEnd = alreadyBooked.getTimeEnd();
                Date alreaydBookedTimeEndDate = simpleDateFormat.parse(alreaydBookedTimeEnd);


                String bookingTimeStart = booking.getTimeStart();
                Date bookingTimeStartDate = simpleDateFormat.parse(bookingTimeStart);

                String bookingTimeEnd = booking.getTimeEnd();
                Date bookingTimeEndDate = simpleDateFormat.parse(bookingTimeEnd);

                if (!bookingTimeStartDate.before(alreadyBookedTimeStartDate) && !bookingTimeEndDate.after(alreaydBookedTimeEndDate)) {
                    return true;
                }
            }
        }
    }

我有一个问题,该场所已经从2:00 PM到3:00 PM预订了,而我们想从1:00 PM到3:00 PM预订。这将返回尚未预订的场地。

有没有一种方法可以解决Java中between方法之间的所有可能性?

展开
收起
几许相思几点泪 2019-12-02 22:53:19 423 分享 版权
阿里云 AI 助理回答

您的代码片段是用Java编写的,用于检查某个场地在特定日期是否已被预订。您想要确保在新的预订请求与已有的预订时间有重叠时,不允许进行新的预订。这里有几个点需要注意和优化:

  1. 时间比较逻辑:您的代码中使用了before()after()方法来判断时间是否有重叠,但这种逻辑可能不足以覆盖所有重叠情况。一个更通用的方法是比较两个时间段的开始和结束时间,以确定是否有交集。

  2. 简化时间处理:为了简化时间比较并提高代码可读性,可以考虑直接使用Java 8引入的LocalTime类,它更适合处理没有日期的日间时间。

下面是基于您的需求优化后的代码示例:

import java.time.LocalTime;
import java.util.Set;

public class VenueBookingChecker {

    public boolean isVenueAvailable(Set<Booking> alreadyBookedSet, Booking newBooking) {
        // 将预订时间转换为LocalTime对象,假设getBookingDate()返回的是无关紧要的,因为我们只比较时间
        LocalTime newBookingTimeStart = LocalTime.parse(newBooking.getTimeStart());
        LocalTime newBookingTimeEnd = LocalTime.parse(newBooking.getTimeEnd());

        for (Booking alreadyBooked : alreadyBookedSet) {
            LocalTime alreadyBookedTimeStart = LocalTime.parse(alreadyBooked.getTimeStart());
            LocalTime alreadyBookedTimeEnd = LocalTime.parse(alreadyBooked.getTimeEnd());

            // 检查是否有时间重叠
            if (!((newBookingTimeEnd.isBefore(alreadyBookedTimeStart)) || 
                  (newBookingTimeStart.isAfter(alreadyBookedTimeEnd)))) {
                // 存在重叠
                return false;
            }
        }

        // 没有重叠,场地可用
        return true;
    }
}

这段代码定义了一个isVenueAvailable方法,接受已预订集合和一个新的预订请求作为参数,通过使用LocalTime类简化了时间比较逻辑,更加直观地检查了新预订是否与已有预订冲突。如果存在时间重叠,则方法返回false,表示场地不可预订;否则,返回true,表示可以预订。

记得调整Booking类中的时间获取方法(如getTimeStart()getTimeEnd())以适应LocalTime.parse()的格式要求,通常是一个HH:mm格式的字符串。此外,根据实际业务逻辑,可能还需要考虑预订日期,上述示例仅针对同一日期内的多个预订进行比较。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: