好吧,不像标题那么简单可能会让它听起来.我用c#以非常原始的方式尝试了这个并且它有效,但我觉得用Java和Oracle作为数据库可以实现更好的工作.所以事情是:
我有预订系统.只要该范围中的每一天可以容纳所请求的数字,就可以在同一天在日期X和日期Y之间的时间段内进行多次预订.要保留的最大群集数为46.因此,从逻辑上讲,您将每天视为46个群集预留的持有者并从中推断出.
现在我遇到的困难是:
如果在数据库中存储了多个有效的预订,那么我想进行新的预订.那么我该如何检查这个新的日期范围是否属于之前预订的任何天数.这里不仅仅谈论x落在y(作为范围).更像:
X_______________________________________Y
X________________________________y
X________________________________Y
X________________________________Y
Run Code Online (Sandbox Code Playgroud)
你可以看到重叠正在发生.
请让我知道我怎么能这样做,因为它会影响对象的早期设计问候
假设您的约会有两种方法: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;
}
Run Code Online (Sandbox Code Playgroud)
我们将此预订与所有现有预订进行比较.如果此预订在现有预订开始之前结束,或者在现有预订结束后开始预订,则不会发生冲突.任何其他条件,他们将重叠.
对每个预订执行此操作.
| 归档时间: |
|
| 查看次数: |
6821 次 |
| 最近记录: |