0

NSDate2秒で同じ日付であることを確認したい(時間は異なる場合があります)。私が現在持っているのはこれです:

- (NSPredicate*) predicateWithDate:(NSDate *)date {
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit ) fromDate:date];
    //create a date with these components
    NSDate *startDate = [calendar dateFromComponents:components];
    [components setMonth:0];
    [components setDay:1];
    [components setYear:0];
    NSDate *endDate = [calendar dateByAddingComponents:components toDate:startDate options:0];
    return [NSPredicate predicateWithFormat:@"((ANY notes.date >= %@) AND (ANY notes.date < %@))",startDate,endDate];
}
4

1 に答える 1

1

startDate、endDate の計算はほぼ正しいように見えますが、次のことを忘れただけですNSDayCalendarUnit

NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:date];

当日の開始日と終了日を計算するにはさまざまな方法がありますが、私は次の少し短いコードを好みます。

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *startDate;
NSTimeInterval interval;
[calendar rangeOfUnit:NSDayCalendarUnit startDate:&startDate interval:&interval forDate:date];
NSDate *endDate = [startDate dateByAddingTimeInterval:interval];

述語は、 の注記date >= startDate、および の注記 (おそらく異なる)を持つすべてのオブジェクトを検索しますdate < endDate

特定の日に少なくとも 1 つのメモがあるオブジェクトを検索する場合は、SUBQUERY が必要です。

[NSPredicate predicateWithFormat:@"SUBQUERY(notes, $n, $n.date >= %@ AND $n.date < %@).@count > 0",
           startDate,endDate];
于 2013-10-16T16:00:10.307 に答える