Java 检查开始时间和结束时间是否介于两次之间
我正在做一个预订场地的项目。目的是,如果在此期间场馆已经预订,则不允许预订Java 检查开始时间和结束时间是否介于两次之间,java,spring,time,datetime-comparison,Java,Spring,Time,Datetime Comparison,我正在做一个预订场地的项目。目的是,如果在此期间场馆已经预订,则不允许预订 if (!alreadyBookedSet.isEmpty()) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); logger.debug("Check if the venue is already booked on this date" + booking.getBookingDate()
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到3:00预订,我们想从下午1:00到3:00预订。这将返回尚未预订的场地
有没有一种方法可以解决java中方法之间的所有可能性 您需要检查是否存在重叠,因此逻辑应该是
if(!bookingTimeStartDate.before(alreadyBookedTimeStartDate) &&
!bookingTimeStartDate.after(alreaydBookedTimeEndDate) ||
!bookingTimeEndDate.before(alreaydBookedTimeStartDate) &&
!bookingTimeEndDate.after(alreaydBookedTimeEndDate))
这是正确的逻辑,因为如果两个时间不在开始之前和结束之后,那么它们必须介于两者之间,因此是重叠的。在这种情况下,它实际上不起作用:2019年11月20日| 9:00:00 AM | 8:00 AM和2019年11月20日11:00 AM | 10:00:00 AM |已经为同一场地预订了。我不能预订同一地点的日期为2019年11月20日,timeStart为上午9:00:00,timeEnd为上午10:00。如果您还想允许背靠背预订,您必须添加一个检查,看看它们是否相等。这太复杂了,而且不正确。我建议您不要使用
SimpleDateFormat
和Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。改为使用LocalTime
from。您能将此问题的答案改编为您的答案吗?不要将开始和结束时间作为字符串保存在预订对象中。将它们保留为LocalTime
对象。