【问题标题】:I want to make a booking system in java, and I cannot check the dates given between another dates我想用java做一个预订系统,我不能检查另一个日期之间的日期
【发布时间】: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。

标签: java date


【解决方案1】:

确定两个预订是否在时间上重叠(即冲突)的方法实际上比人们最初预期的要容易。

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

(convDateStr2 equal to or after convertedEndDateFirst)
        or (convertedStartDateFirst equal to or after convDateEnd2)

我给你伪代码,你可以自己翻译成Java。我会在这个答案的底部给你一些提示。请注意,您不需要为此查找开始和结束之间的日期。

相反,如果两个预订重叠/冲突

(convDateStr2 before convertedEndDateFirst)
        and (convertedStartDateFirst before convDateEnd2)

我基本上只是颠倒了第一个表达式。

如果您使用Date 类,您可以使用它的beforeequals 和/或after 方法。类似地,LocalDate(Java 8 或其中一个反向端口)的方法是 isAfter()isBeforeisEqual()equals()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-05
    • 2013-04-11
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    相关资源
    最近更新 更多