NSDate содержится в некотором интервале

У меня есть такие данные:

Monday: from 8.00am to 13.pm; 14:00 pm to 20.00pm 
Tuesdays: from 8.00am to 10 am; 13.00 pm to 17.00 pm; from 17.00 pm to 23.00 pm;
.....

Теперь я хотел бы проверить, содержится ли NSDate (например, сейчас NSDate) в каком-то интервале... Есть ли что-то для этого случая?


person Safari    schedule 09.06.2014    source источник
comment
Вы бы сохранили даты начала и окончания, а затем сравнили дату теста с каждой из них. Что в этом сложного?   -  person trojanfoe    schedule 09.06.2014
comment
эффективность.. например..   -  person Safari    schedule 09.06.2014
comment
Как так? Вам нужно определить эти диапазоны, поэтому вам нужно сохранить начало/конец, а затем вам нужно сравнить каждый диапазон. Я думаю, что это единственный способ сделать это.   -  person trojanfoe    schedule 09.06.2014
comment
Я согласен с @trojanfoe. Для этого нет способа O(1) или каких-либо удобных методов. Лучший способ — сохранить интервал в какой-либо структуре, которая поможет вам быстро его найти.   -  person 3329    schedule 09.06.2014


Ответы (1)


NSDate — очень тонкая оболочка для значения двойной точности с плавающей запятой (количество секунд с 1 января 2001 г.).

Сравнения NSDate очень быстрые.

Если вы действительно беспокоитесь об этом, преобразуйте свои даты в значения NSTimeInterval (двойные), а затем выполните численное сравнение:

NSTimeInterval startInterval = [startDate timeIntervalSinceReferenceDate];
NSTimeInterval endInterval = [endDate timeIntervalSinceReferenceDate];

NSTimeInterval someDateInterval = [someDate timeIntervalSinceReferenceDate];

if (someDateInterval >= startInterval && someDateInterval <= endInterval)
  //the date someDate is between startDate and endDate.

Очевидно, вы получите начальный и конечный временные интервалы один раз, а затем используете их для сравнения каждой даты-кандидата.

person Duncan C    schedule 09.06.2014