2017-03-04 25 views
-3

我想爲客房預訂系統。用戶將從startDate到endDate插入一個日期。好吧,之後可以說另一個用戶需要在與用戶相同的日期之間預訂同一個房間。因此,如果第一個用戶從2017-1-1(yyyy-MM-dd)預訂了2017年的房間, 1-8,下一個用戶不能在這些日期或2017-1-3到2017-1-10之間預訂同一個房間。用戶將被告知他/她只能在1/1之前或之後1/8。我想在java中預訂系統,我無法檢查在另一個日期之間給出的日期

這裏是我的代碼:

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日期,爲什麼呢?以及如何返回確切的日期。

+5

對不起,這不是StackOverflow的工作方式。形式問題_「我想做X,請告訴我在我的代碼中改變什麼」_被認爲是無關緊要的。請訪問[幫助]並閱讀[問],尤其是閱讀[爲什麼是「有人可以幫我嗎?」不是一個實際的問題?](http://meta.stackoverflow.com/q/284236/18157) –

+0

I建議你看看喬達時間:http://www.joda.org/joda-time/,這是一個很好的API來計算日期,比日曆更好,更不容易出錯 – 2017-03-04 00:51:25

+1

@Hugo喬達時間項目現在處於維護模式。該團隊建議遷移到java.time類。 –

回答

0

確定兩次預訂是否在時間上重疊的方式,即衝突實際上比人們預期的要容易。

兩張黃牌都沒有衝突,如果一個到來之前另:

(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(),isBefore,isEqual()equals()

相關問題