Столкновение бронирований, сравнивающих DateTimes, используя CompareTo - PullRequest
1 голос
/ 19 февраля 2012

Я делаю систему бронирования, где пользователи могут назначать встречи друг с другом. Что мне нужно сделать, так это убедиться, что встречи не расходятся по времени.

Например: Встреча 1 с 13:00 до 14:00. Заседание 2 с 13:30 до 14:30.

Эти встречи противоречат друг другу, и поэтому бронирование не должно производиться.

Теперь, когда я пытаюсь сделать это, я не получаю желаемого результата, иногда он думает, что бронь не должна быть сделана, когда это действительно необходимо, и наоборот.

Вот мой код:

if (OldBookingDate.Equals(NewBookingDate))
                {
                    // Check if (OldBookingTime -> OldEndTime) clashes with (NewBookingTime -> NewEndTime)
                    //  For Example (10:00 -> 12:00), (09:00 -> 11:00)
                    //  So this Clashes!
                    DateTime OldBookingTime_End = OldBookingTime_Start.AddHours(OldDurationInt);
                    DateTime NewBookingTime_End = NewBookingTime_Start.AddHours(NewDurationInt);

                    int Clash1 = OldBookingTime_Start.CompareTo(NewBookingTime_Start);
                    int Clash2 = OldBookingTime_End.CompareTo(NewBookingTime_End);
                    if ((Clash1 < 0) || (Clash2 > 0))
                    {
                        // If Clash1 -> Finishes before Meeting
                        // If Clash2 -> Finishes after Meeting
                        Available = true;
                    }
                    if ((Clash1 == 0) || (Clash2 == 0))
                    {
                        // Start and end is the same
                        Available = false;
                    }
                    if ((Clash1 > 0) || (Clash2 < 0))
                    {
                        // Intersects/Clashes with already booked meeting
                        Available = false;
                    }
                }

Основная проблема, по-видимому, связана с оператором ((Clash1 > 0) || (Clash2 < 0)) if, например, когда резервирование должно быть выполнено первым, если оператор устанавливает значение true (как и должно быть), но затем этот оператор if затем устанавливает его в значение false.

Как я могу правильно выполнить эти проверки, чтобы убедиться, что время не совпадает?

1 Ответ

1 голос
/ 19 февраля 2012

Попробуйте это:

bool clashing = (OldBookingTime_Start <= NewBookingTime_End)
             && (NewBookingTime_Start >= OldBookTime_End);

Available = !clashing;

Смотри также:

Определить, перекрываются ли два диапазона дат

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...