Podczas gdy w ludzkiej komunikacji data jest często równa z dniem, to nie jest tak samo z obiektami NSDate: NSDate reprezentuje jedną chwilę w czasie. Daty, które różnią się w kilka sekund, nie są równe. I faktycznie nie reprezentują one dni, miesiąca, roku w ogóle, ponieważ różni się to od systemu kalendarza do systemu kalendarzy
musisz sam zdefiniować, czy daty w tej samej minucie, godzinie, dniu ... są równe. Więc w zasadzie musisz nauczyć program, aby umożliwić trochę rozmytości.
tutaj rozdzielczości minut
NSDate *startDate = ....;
NSTimeInterval length;
[[NSCalendar currentCalendar] rangeOfUnit:NSMinuteCalendarUnit
startDate:&startDate
interval:&length
forDate:startDate];
NSDate *endDate = [startDate dateByAddingTimeInterval:length];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(eDate >= %@) AND (eDate < %@)", startDate, endDate];
dla dat w tym samym dniu (świadome stref czasowych i czasu letniego razy) po prostu by to zmienić:
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit
startDate:&startDate
interval:&length
forDate:startDate];
To działa, dzięki. Otrzymałem błąd, używając tablicy w predykacie, ale działało to ..... @ "eDate>% @ AND eDate <% @", date1, date2] Jeszcze raz dziękuję. – user2228755
dlaczego dodajesz 'NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit' w 'components: fromDate:' po prostu go odrzucić? – vikingosegundo
Moja zła. To był kod wklejony z projektu, który faktycznie używa tych składników. Zaniedbałem ich usunąć na potrzeby tego postu. Zmienię to teraz;] Dzięki za wskazanie tego! – CaptainRedmuff