我已经设置了coreData模型并添加了数据。我想搜索过去30天内的所有项目,然后将总数加起来。
这是我得到的: -
- (void) calculateThirtyDayValues {
NSDate *endDate = [NSDate date];
NSTimeInterval timeSinceRefDate = [NSDate timeIntervalSinceReferenceDate];
NSTimeInterval lastThirtyDays = timeSinceRefDate- 2592000;
NSDate *startDate = [NSDate dateWithTimeIntervalSinceReferenceDate:lastThirtyDays];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"(date >= %@) AND (date <= %@)", startDate, endDate];
}
基本上我已经创建了今天日期的NSDate对象集,然后创建了另一个NSDate对象,设置为今天之前的30天。然后尝试从开始日期到当前日期预测所有对象。
我收到了结果,但它们似乎与过去30天的总数不匹配。它似乎只是归还了一切!
有什么想法吗?
答案 0 :(得分:1)
您的谓词似乎没问题,但由于几个原因,您的日期代码不正确。
[NSDate date]
以亚毫秒精度返回当前日期。因此,如果您在当地时间下午4:15:37创建谓词,则此谓词将找不到任何日期为当地时间下午5:37:42的对象。如果你想要这样的精确度,那你就可以了。但是,如果您想要粒度到不同的日历单位(例如按天),那么您需要做更多的工作。并非每天都有86,400秒。因此,您尝试减去(30 * 86400)是巧妙的错误。你应该让日历对象为你做数学运算:
NSDate *endDate = ...;
NSDateComponents *diff = [[NSDateComponents alloc] init];
[diff setDay:-30];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *startDate = [calendar dateByAddingComponents:diff toDate:endDate options:0];