我想用java做一个预订系统,我不能检查其他日期之间的日期

我想用java做一个预订系统,我不能检查其他日期之间的日期,java,date,Java,Date,我想做一个房间预订系统。用户将插入从startDate到endDate的日期。好的,在这之后,假设另一个用户希望在与该用户相同的日期之间预订相同的房间。因此,如果第一个用户从2017-1-1(yyyy-MM-dd)到2017-1-8预订房间,下一位用户不能在这些日期或2017-1-3至2017-1-10期间预订同一房间。将通知用户他/她只能在1/1之前或1/8之后预订 这是我的密码: import java.text.ParseException; import java.text.Simple

我想做一个房间预订系统。用户将插入从startDate到endDate的日期。好的,在这之后,假设另一个用户希望在与该用户相同的日期之间预订相同的房间。因此,如果第一个用户从2017-1-1(yyyy-MM-dd)到2017-1-8预订房间,下一位用户不能在这些日期或2017-1-3至2017-1-10期间预订同一房间。将通知用户他/她只能在1/1之前或1/8之后预订

这是我的密码:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class Main {
    public static void main(String[] args) {


        String startDateFirst = "2016-1-1";
        String endDateFirst = "2016-1-4";

        Date convertedStartDateFirst = convertDate(startDateFirst);
        Date convertedEndDateFirst = convertDate(endDateFirst);

        List<Date> myList = new ArrayList<Date>(getDaysBetweenDates(convertedStartDateFirst,convertedEndDateFirst));


        String startDate2 = "2016-1-1";
        String endDate2 = "2016-1-3";

        Date convDateStr2 = convertDate(startDate2);
        Date convDateEnd2 = convertDate(endDate2);

        List<Date> myListSecond = new ArrayList<Date>(getDaysBetweenDates(convDateStr2,convDateEnd2));

        System.out.println("FIRST BOOKING: " + getDaysBetweenDates(convertedStartDateFirst,convertedEndDateFirst));
        System.out.println("SECOND BOOKING: " + getDaysBetweenDates(convDateStr2,convDateEnd2));


       for (int i=0; i<=myListSecond.size(); i++)
        {

                if ((myList.get(i).getTime() >= myListSecond.get(i).getTime() && myList.get(i).getTime() <= myListSecond.get(i).getTime())) {
                    System.out.println(myListSecond.get(i) + " is taken");
                } else if (myList.get(i).equals(myListSecond.get(i))) {
                    System.out.println(myListSecond.get(i) + " equal");
                } else {
                    System.out.println(myListSecond.get(i) + "is not");
                }


        }



    }

    public static Date convertDate(String strDate)
    {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
        try{
            Date date = format.parse(strDate);
            //String finalDate = format.format(date);
            return date;
        }catch (ParseException e)
        {

        }
        return null;
    }
    public static List<Date> getDaysBetweenDates(Date startdate, Date enddate)
    {
        List<Date> dates = new ArrayList<Date>();
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(startdate);

        while (calendar.getTime().before(enddate))`enter code here`
        {
            Date result = calendar.getTime();
            dates.add(result);
            calendar.add(Calendar.DATE,1);
        }
        return dates;
    }

}
import java.text.ParseException;
导入java.text.simpleDataFormat;
导入java.util.*;
公共班机{
公共静态void main(字符串[]args){
字符串startDateFirst=“2016-1-1”;
字符串endDateFirst=“2016-1-4”;
Date convertedStartDateFirst=转换日期(startDateFirst);
日期ConvertedEndateFirst=转换日期(endDateFirst);
List myList=new ArrayList(日期之间的GetDays(convertedStartDateFirst,convertedEndDateFirst));
字符串startDate2=“2016-1-1”;
字符串endDate2=“2016-1-3”;
日期convDateStr2=转换日期(startDate2);
日期convDateEnd2=转换日期(endDate2);
List myListSecond=新的ArrayList(getDaysBetween日期(convDateStr2,convDateEnd2));
System.out.println(“第一次预订:+GetDaysBetween日期(convertedStartDateFirst,ConvertedDateFirst));
System.out.println(“第二次预订:+GetDaysBetween日期(convDateStr2,convDateEnd2));

对于(int i=0;i=myListSecond.get(i).getTime()&&myList.get(i).getTime(),确定两个预订是否在时间上重叠(即冲突)的方法实际上比人们最初预期的要容易

如果两个预订中的一个在另一个之前,则两个预订不会发生冲突:

(convDateStr2 equal to or after convertedEndDateFirst)
        or (convertedStartDateFirst equal to or after convDateEnd2)
我给你伪代码,你可以自己翻译成Java。我会在这个答案的底部给你一些提示。请注意,你不需要找到开始和结束之间的日期

相反,如果发生以下情况,则两个预订重叠/冲突

(convDateStr2 before convertedEndDateFirst)
        and (convertedStartDateFirst before convDateEnd2)
我基本上只是颠倒了第一个表达式


如果您使用的是
Date
类,则可以在
之前使用它的
equals
和/或
之后使用
方法。类似地,对于
LocalDate
(Java 8或其中一个后端口),方法是
isAfter()
isBefore
isEqual()
equals()

对不起,这不是StackOverflow的工作方式。“我想做X,请告诉我要在我的代码中更改什么”这样的问题被认为是离题的。请访问并阅读,特别是阅读@Hugo。Joda Time项目现在处于维护模式。团队建议迁移到java.Time类。@Hugo在Three Ten Backport项目中,java.Time的大部分功能都被后移植到java 6和java 7。由Stephen Colebourne领导,Joda Time的同一人和java.time。在ThreeTenABP项目中进一步适用于Android。因此,除了一些功能差异外,无需建议Joda time。@BasilBourque我不知道这个项目,非常有趣!ThanksJoda time将继续积极更新,因此无需急着迁移。但一般来说,我建议旧java中的新工作使用back-port而不是Joda Time。