我正在Android中编写一个会议应用程序。在此应用程序中,用户可以输入将来的日期和时间段。时隙意味着它将成对(即下午2:00至下午3:00或下午1:45至下午2:15)。所以,我的问题是当用户进入新的时隙时,它不应该与较旧的时段或先前输入的时隙冲突。 即我的ArrayList中有3个字段。 date,fromTime,toTime。 因此,假设用户已经在这些时间段创建了会议:
22/09/2017 11:00 AM to 11:45 AM
22/09/2017 11:55 AM to 12:30 PM
22/09/2017 12:50 PM to 01:30 PM
22/09/2017 04:30 PM to 05:30 PM
因此,在该用户之后只能插入不会影响或与上述时间冲突的时隙。
i.e.
02:00 PM to 3:00 PM
03:30 PM to 04:15 PM <-- These two time slots can be valid but
it can't be like this
11:30 AM to 12:00 PM
12:15 PM to 12:40 PM
请帮帮我。提前感谢每一个人。
答案 0 :(得分:0)
如果您将这些插槽保存为<Date, Date>
对,则可以使用此方法检查新配对是否与现有插槽冲突:
public class Pair {
private Date from;
private Date until;
public Pair(Date from, Date until){
this.from = from;
this.until = until;
}
public Date getFrom(){ return from; }
public Date getUntil(){ return until; }
public void setFrom(Date from){ this.from = from; }
public void setUntil(Date until){ this.until = until; }
}
List<Pair> listOfMeetings = getDefaultList();
Pair newPair = new Pair(dateFrom, DateUntil)
boolean hasConficts = false;
Calendar newFromCalendar = Calendar.getInstance();
Calendar loopingFromCalendar = Calendar.getInstance();
Calendar newUntilCalendar = Calendar.getInstance();
Calendar loopingUntilCalendar = Calendar.getInstance();
for(Pair p : listOfMeetings) {
newFromCalendar.setTime(newPair.getFrom());
loopingFromCalendar.setTime(p.getFrom());
newUntilCalendar.setTime(newPair.getUntil());
loopingUntilCalendar.setTime(p.getUntil());
if (newFromCalendar.after(loopingFromCalendar) && newFromCalendar.before(loopingUntilCalendar) ) {
hasConficts = true;
break;
}
if (newUntilCalendar.after(loopingFromCalendar) && newUntilCalendar.before(loopingUntilCalendar) ) {
hasConficts = true;
break;
}
}
在循环中检查现有From
对之间是否有新的Until
或新From-Until