我正在从事一个用于预订场地的项目。目的是如果在此期间场地已在预订,则不允许预订
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方法之间的所有可能性?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您的代码片段是用Java编写的,用于检查某个场地在特定日期是否已被预订。您想要确保在新的预订请求与已有的预订时间有重叠时,不允许进行新的预订。这里有几个点需要注意和优化:
时间比较逻辑:您的代码中使用了before()
和after()
方法来判断时间是否有重叠,但这种逻辑可能不足以覆盖所有重叠情况。一个更通用的方法是比较两个时间段的开始和结束时间,以确定是否有交集。
简化时间处理:为了简化时间比较并提高代码可读性,可以考虑直接使用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格式的字符串。此外,根据实际业务逻辑,可能还需要考虑预订日期,上述示例仅针对同一日期内的多个预订进行比较。