核心数据 - 使用NSDates进行预测

Dal*_*lar 2 iphone core-data

你好,

我正在开发Core Data应用程序,必须根据日期进行一些过滤.我进行了一些测试,看起来在比较NSDates时,Core Data也在比较日期的时间成分.

我的代码:

- (BOOL)hasSpeakersWithinDateRangeFrom:(NSDate *)startOfRange through:(NSDate *)endOfRange {
    NSPredicate* dateRangePredicate = [NSPredicate predicateWithFormat:@"startOn <= %@ && endOn >= %@", startOfRange, endOfRange];
    NSSet* speakersWithinDateRange = [self.speakers filteredSetUsingPredicate:dateRangePredicate];

    if ([speakersWithinDateRange count] > 0)
        return YES;
    else
        return NO;
}
Run Code Online (Sandbox Code Playgroud)

我有一个"方便"的方法,是一个单行的:

- (BOOL)hasSpeakersNow {
    return [self hasSpeakersWithinDateRangeFrom:[NSDate date] through:[NSDate date]];
}
Run Code Online (Sandbox Code Playgroud)

当我运行一些基本测试时,它不能按计划工作,而且我可以告诉Core Data正在比较NSDate对象的时间组件和日期.

那么,我怎样才能重写上面的内容以忽略时间,只对当天过去敏感呢?

谢谢

Jas*_*man 5

您可能希望熟悉NSDateComponents和NSCalendar.您可能需要做的是从日期中提取组件,并仅使用没有时间组件的日,月和年组件构建新的NSDates.

对于"当前"日,您需要使用今天午夜的日期创建1天范围,并通过将日期添加1天来创建日期.NSCalendar有方法为您做一些这样的事情.

这些文档可能会有所帮助: