住宿预订日期重叠

ecfdbz9o  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(313)

我已经基于下面的条件实现了isbookable()方法,但是isbookable()返回true如果到达日期>=离开日期或离开日期<到达日期简而言之它允许重叠日期。有谁能帮我解决这个问题吗?条件:如果可为请求的“到达日期”和“离开日期”提供住宿,则isbookable方法返回true,否则返回false。

@Override
    public boolean isBookable(Integer custId,Long accommodationId, Date arrival_date, Date departure_date) throws ParseException {

        SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM-yyyy");
        Rentability rentability=new Rentability();
        RentabilityDAO rdao=RentabilityDAOFactory.getInstance();
        List<Rentability> list=new ArrayList<Rentability>();

        list=rdao.getAllRentabilityByAccommodationId(accommodationId);

    //business logic    

    return;

}
nhhxz33t

nhhxz33t1#

希望它能让你停滞不前。。

public boolean isBookable(Integer custId,Long accommodationId, Date arrival_date, Date departure_date) throws ParseException {

    SimpleDateFormat sdf1 = new SimpleDateFormat("dd-MM-yyyy");
    Rentability rentability=new Rentability();
    RentabilityDAO rdao=RentabilityDAOFactory.getInstance();
    List<Rentability> list=new ArrayList<Rentability>();

    list=rdao.getAllRentabilityByaccommodationId(accommodationId);
    int flag=0;

    if(list.isEmpty()){ 
        flag=1;
    }else{
        for(Rentability r:list){   //avoid overlap
            if(arrival_date.compareTo(sdf1.parse(r.getArrival_date()))>=0
                &&arrival_date.compareTo(sdf1.parse(r.getDeparture_date()))>=0
                &&departure_date.compareTo(sdf1.parse(r.getArrival_date()))>=0
                &&departure_date.compareTo(sdf1.parse(r.getDeparture_date()))>=0||
                arrival_date.compareTo(sdf1.parse(r.getArrival_date()))<=0
                &&arrival_date.compareTo(sdf1.parse(r.getDeparture_date()))<=0
                &&departure_date.compareTo(sdf1.parse(r.getArrival_date()))<=0
                &&departure_date.compareTo(sdf1.parse(r.getDeparture_date()))<=0)
                {
                flag=1;
            }
            else{
                flag=0;
            }
        }
    }

    //business loging 
    check overlaping condition by flag status..
    return;

    }
vcudknz3

vcudknz32#

localdate::isafter后

您正在使用糟糕的日期时间类,这些类在几年前被jsr310中定义的现代java.time类所取代。从不使用 Date , Calendar ,和 SimpleDateFormat .
对于不带时间和时区的仅日期值,请使用 LocalDate .
要进行比较,请使用 isEqual , isBefore ,和 isAfter .

LocalDate arrival = LocalDate.of( 2021 , Month.JANUARY , 23 ) ;
LocalDate departure = LocalDate.of( 2021 , Month.JANUARY , 25 ) ;

boolean departureIsAfterArrival = departure.isAfter( arrival ) ;

一个简短的说法“是相同的或以后的”是“不是以前”。

boolean departureIsSameOrLaterAsArrival = ( ! departure.isBefore( arrival ) ) ;

您的代码:
(“日-月-年”)
当以文本形式交换日期时间值时,仅使用标准iso 8601格式。这些格式在java.time中默认使用。
为了向用户演示,让java.time使用 DateTimeFormatter.ofLocalized… 方法。
所有这些已经在堆栈溢出上被多次讨论过了。搜索以了解更多信息。

关于java.time

java.time框架内置于Java8及更高版本中。这些类取代了旧的遗留日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .
要了解更多信息,请参阅oracle教程。和搜索堆栈溢出的许多例子和解释。规格为jsr 310。
现在处于维护模式的joda time项目建议迁移到java.time类。
您可以直接与数据库交换java.time对象。使用符合jdbc 4.2或更高版本的jdbc驱动程序。不需要线,不需要线 java.sql.* 班级。hibernate5和jpa2.2支持java.time。
从哪里获得java.time类?
JavaSE8、JavaSE9、JavaSE10、JavaSE11及更高版本—标准JavaAPI的一部分,带有捆绑实现。
Java9带来了一些小的特性和修复。
java se 6和java se 7
大部分java.time功能都是通过三个十个后端口后端口移植到Java6和Java7的。
安卓
android(26+)的更高版本捆绑了java.time类的实现。
对于早期的android(<26),一个称为api desugaring的过程带来了java.time功能的一个子集,这些功能最初没有内置到android中。
如果desugaring不能提供您所需要的,那么threetenabp项目将threeten backport(如上所述)改编为android。了解如何使用threetenabp…。

相关问题