Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查开始时间和结束时间是否介于两次之间_Java_Spring_Time_Datetime Comparison - Fatal编程技术网

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
对象。