【发布时间】:2017-03-04 00:18:32
【问题描述】:
我想做一个房间预订系统。用户将插入一个从 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;
}
}
虽然在getDaysBetweenDates 中我得到了日期,但日期为-1,为什么?以及如何返回确切的日期。
【问题讨论】:
-
抱歉,这不是 StackOverflow 的工作方式。 “我想做 X,请告诉我要在我的代码中更改什么” 形式的问题被认为是题外话。请访问help center并阅读How to Ask,尤其是阅读Why is “Can someone help me?” not an actual question?
-
@Hugo Joda-Time 项目现在处于维护模式。团队建议迁移到 java.time 类。
-
@Hugo 在 ThreeTen-Backport 项目中,大部分 java.time 功能都向后移植到 Java 6 和 Java 7。由 Joda-Time 和 java.time 背后的同一个人 Stephen Colebourne 领导。在 ThreeTenABP 项目中进一步适用于 Android。所以除了一些功能差异外,无需推荐 Joda-Time。
-
@BasilBourque 我不知道这个项目,非常有趣!谢谢
-
Joda-Time 持续在积极更新中,所以不需要急迁移。但一般来说,我建议旧 Java 中的新工作使用反向端口而不是 Joda-Time。