好吧,不像标题那么简单可能会让它听起来。我用c#以非常原始的方式尝试了这个并且它有效,但我觉得用Java和Oracle作为数据库可以实现更好的工作。所以事情是:
我有一个预订系统。只要该范围中的每一天可以容纳所请求的数字,就可以在同一天在日期X和日期Y之间的时间段内进行多次预订。要保留的最大群集数为46.因此,从逻辑上讲,您会将每天视为46个群集预留的持有者并从中推断。
现在我遇到的困难是:
如果在数据库中存储了多个有效的预订,那么我想进行新的预订。那么我该如何检查这个新的日期范围是否属于之前预订的任何天数。这里不仅仅谈论x落在y(作为范围)。更像是:
X_______________________________________Y
X________________________________y
X________________________________Y
X________________________________Y
你可以看到重叠正在发生。
请让我知道我怎么能这样做,因为它会影响对象的早期设计 此致
答案 0 :(得分:8)
假设您的日期有两种方法:isBefore(Date other)
和isAfter(Date other)
。显然,如果他们不这样做,你可以通过外部方法或包装或其他方法来解决这个问题。编辑:java.util.Date具有您可以使用的compareTo
方法。
你这样做:
public boolean overlapsWithExisting(Booking booking) {
final Date early = booking.getStart();
final Date late = booking.getEnd();
for(Booking existing : existingBookings) {
if(!(early.isAfter(existing.getEnd()) || late.isBefore(existing.getStart()))
return true;
}
return false;
}
我们将此预订与所有现有预订进行比较。如果此预订在现有预订开始之前结束,或者在现有预订结束后开始预订,则不会发生冲突。任何其他条件,它们将重叠。
每次预订都这样做。
答案 1 :(得分:1)