【问题标题】:check if startTime and endTimer are between two times [duplicate]检查 startTime 和 endTimer 是否在两次之间[重复]
【发布时间】:2020-03-27 04:56:52
【问题描述】:

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

 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中方法之间的所有概率?

【问题讨论】:

  • 我建议你不要使用SimpleDateFormatDate。这些类设计不佳且早已过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time APILocalTime
  • 您能否调整这个问题的答案来回答您的问题? Determine Whether Two Date Ranges Overlap
  • 不要将开始和结束时间作为字符串保留在您的预订对象中。将它们保留为 LocalTime 对象。

标签: java spring time datetime-comparison


【解决方案1】:

你需要检查是否有重叠,所以逻辑应该是

if(!bookingTimeStartDate.before(alreadyBookedTimeStartDate) && 
!bookingTimeStartDate.after(alreaydBookedTimeEndDate) || 
!bookingTimeEndDate.before(alreaydBookedTimeStartDate) && 
!bookingTimeEndDate.after(alreaydBookedTimeEndDate))

这是正确的逻辑,因为如果任何一个时间都不是在开始之前和结束之后,它们必须在两者之间,因此是重叠的。

【讨论】:

  • 在这种情况下它实际上不起作用:20/11/2019 |上午 9:00:00 |上午 8:00:00 和 | 20/11/2019 上午 11:00:00 |上午 10:00:00 |已经预订了同一个场地。我无法预订同一个场地 Date='20/11/2019', timeStart=' 9:00:00 AM', timeEnd='10:00:00 AM'
  • 如果您还想允许背靠背预订,则必须添加检查以查看它们是否相等。
  • 过于复杂且不正确。
猜你喜欢
  • 1970-01-01
  • 2013-04-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 2022-01-20
相关资源
最近更新 更多