Objective-C - как найти объекты с опорой, равной дате? - PullRequest
2 голосов
/ 07 марта 2012

Я пытаюсь отфильтровать массив объектов, выбирая те, в которых свойство типа NSDate равно определенной дате.Однако я хочу сравнить только дату и игнорировать разницу во времени.

Поэтому я использую NSPredicate следующим образом:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"PropertyWithDate == %@", 
                      [NSDate date]];

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

Ответы [ 2 ]

3 голосов
/ 07 марта 2012

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

Короткий ответ заключается в том, что вам нужно будет построить две NSDates: одну на 12:00 дня вашей даты и одну на 12:00 следующего дня, а затем настроить предикат для поиска дат между ними:

NSPredicate *firstPredicate = [NSPredicate predicateWithFormat:@"PropertyWithDate > %@", firstDate];
NSPredicate *secondPredicate = [NSPredicate predicateWithFormat:@"PropertyWithDate < %@", secondDate];

NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubPredicates:[NSArray arrayWithObjects:firstPredicate, secondPredicate, nil]];

Чтобы создать firstDate и secondDate, вам нужно использовать NSCalendar components:fromDate: и dateFromComponents: методы. Если вы хотите использовать текущий календарь и часовой пояс устройства по умолчанию, вы можете просто использовать [NSCalendar calendar], чтобы получить календарь для использования.

0 голосов
/ 07 марта 2012

Вы должны использовать NSDatecomponents, чтобы сделать сравнение.В видеороликах WWDC 2011 есть отличное видео о математике и библиотеках.

Для получения дополнительной информации см. Ссылку на класс NSDateComponents .

...