iie
iie

Reputation: 501

How to determine if the specific time is between given range?

Problem: I have a list containg hours, for example: 08:15:00 08:45:00 09:00:00 12:00:00 ... application is allowing user to make an appointment for a specific hour let'say: 8:15:00, each meeting takes half an hour.

Question: How to determine if there is a slot needed for appointment like this? I know that Calendar class have methods before() nad after(), but it doesn'solve my problem. I mean if there is appointment at 12:00 and another one at 12:00, how to prevent before making another one at 12:15?

edit:

I've tried using methods I mentioned before, like:

Calendar cal1 = Calendar.getInstance(); // for example 12:00:00
Calendar cal2 = Calendar.getInstance(); // for exmaple 12:30:00
Calendar userTime = Calendar.getInstance(); // time to test: 12:15:00

if(user.after(cal1)&& user.before(cal2)){
... // do sth
}

Upvotes: 2

Views: 10301

Answers (3)

Eugenio Cuevas
Eugenio Cuevas

Reputation: 11078

Check if the date to check is between the two provided:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm");
Date before = sdf.parse("07/05/2012 08:00");
Date after = sdf.parse("07/05/2012 08:30");
Date toCheck = sdf.parse("07/05/2012 08:15");
//is toCheck between the two?
boolean isAvailable = (before.getTime() < toCheck.getTime()) && after.getTime() > toCheck.getTime();

To book for a determinate hour, I would do a class with two dates and a method to check this:

public class Appointment{

 private Date start;
 private Date end;

 public boolean isBetween(Date toCheck){....}

}

Then you can simply do an Schedule class extending ArrayList, adding a method isDateAvailable(Date toCheck), iterating the list of Appointments and checking that there is no one conflicting.

Upvotes: 5

Stas Jaro
Stas Jaro

Reputation: 4885

Well how you would do it specifically depends on how you are storing your data, format, etc., but generally what you would do is simply check if there is an appointment for any time between the requested time to the requested time + requested length.

// Example (using int time(1 = 1 minute), assuming that appointments can only be at 15min intervals)
boolean isHalfHourTimeSlotAvaliable(int time) {
    for (int i = 0; i < appointments.size(); i++) {
        if (appointments.get(i).time == time || appointments.get(i).time == time + 15) {
            return false;
        }
    }
    return true;
}

Upvotes: 1

Jimi Kimble
Jimi Kimble

Reputation: 504

I'd have some kind of appointment class with either a start timestamp and a duration or a start time and an end time. Then when adding new appointments to the schedule, check that the appointment with the start time before the new appointment doesn't run over the start time of the proposed new appointment.

Upvotes: 1

Related Questions