按Android中的时段排序列表,并使用较旧的时段检查新时段

时间:2017-09-21 13:05:45

标签: java android datetime time

我正在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 

请帮帮我。提前感谢每一个人。

1 个答案:

答案 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