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