我需要预订房间预订应用程序。我想从datepicker值中取出日期,然后从timepicker值开始时间和结束时间。
为此,我想检查所选日期。然后,检查开始时间和结束时间是否以任何方式重叠,无论是开始时间,结束时间还是在所选日期之间。我一直在寻找解决方案,但没找到。
示例:
用户A:日期= 27可能是2013年开始时间=晚上10点结束时间= 12pm
用户B:日期= 28可能是2013年开始时间=晚上10点结束时间= 12pm
如果我是用户C,并且我还想在2013年5月27日的10-12pm时段,如何比较日期,然后比较用户A已经采用时隙的开始时间和结束时间
希望有人可以指出我正确的方向 - 我是Android的新手。任何帮助将不胜感激,谢谢!
我的Timepicker代码:
private TimePickerDialog.OnTimeSetListener timePickerStartListener = new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int selectedHour, int selectedMinute) {
hour = selectedHour;
minute = selectedMinute;
// set current time into textview
textStartTime.setText(new StringBuilder().append(padding_str(hour)).append(":").append(padding_str(minute)));
}
};
private TimePickerDialog.OnTimeSetListener timePickerEndListener = new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int selectedHour, int selectedMinute) {
hour = selectedHour;
minute = selectedMinute;
// set current time into textview
textEndTime.setText(new StringBuilder().append(padding_str(hour)).append(":").append(padding_str(minute)));
}
};
private static String padding_str(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}
我的DatePicker代码:
private DatePickerDialog.OnDateSetListener datePickerListener
= new DatePickerDialog.OnDateSetListener() {
// when dialog box is closed, below method will be called.
public void onDateSet(DatePicker view, int selectedYear,
int selectedMonth, int selectedDay) {
year = selectedYear;
month = selectedMonth;
day = selectedDay;
// set selected date into textview
tvDisplayDate.setText(new StringBuilder().append(month + 1)
.append("-").append(day).append("-").append(year)
.append(" "));
}
};
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, datePickerListener, year, month, day);
case START_TIME_DIALOG_ID:
return new TimePickerDialog(this, timePickerStartListener, hour, minute, false);
case END_TIME_DIALOG_ID:
return new TimePickerDialog(this, timePickerEndListener, hour, minute, false);
}
return null;
}
答案 0 :(得分:0)
我们假设系统中已有预留。我们称之为预订A 。让我们调用应用程序用户正在尝试进行预订B 的预订。
每个预订都会在某些时间点开始和结束。如果您通过Calendar
class的实例表示这些点,则可以在实例之间进行比较,以确定保留是否重叠。
您可以这样做:
Calendar resAstart = Calendar.getInstance(); // Start of Reservation A
Calendar resAend = Calendar.getInstance(); // End of Reservation A
Calendar resBstart = Calendar.getInstance(); // Start of Reservation B
Calendar resBend = Calendar.getInstance(); // End of Reservation B
日历初始化为当前时间,因此您需要清除日历,因为您对秒和毫秒不感兴趣。如果你没有这样做,比较两个日历的平等可能会返回false,即使他们有相同的日,月,年,小时和分钟设置。
resAstart.clear();
// the same for resAend, resBstart and resBend
现在您需要设置日历。
resAstart.set(Calendar.YEAR, /* the year when Reservation A starts */);
resAstart.set(Calendar.MONTH, /* the month when Reservation A starts */);
// and so on
// the same for resAend, resBstart and resBend
现在您需要比较这些值。如果预订应该重叠,那么必须发生以下情况:
在代码中它看起来像这样:
boolean overlap = false;
if (resBstart.equals(resAstart)) { // scenario 1
overlap = true;
} else if (resBstart.after(resAstart) && resBstart.before(resAend)) { // scenario 2
overlap = true;
} else if (resBend.equals(resAend)) { // scenario 3
overlap = true;
} else if (resBend.after(resAstart) && resBend.before(resAend)) { // scenario 4
overlap = true;
} else if (resBstart.before(resAstart) && resBend.after(resAend)) { // scenario 5
overlap = true;
}
现在overlap
的值会告诉您保留是否重叠。
我希望这是可以理解的,并且有所帮助。