0

我已经设置了一个 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 对象,然后创建了另一个设置为今天前 30 天的 NSDate 对象。然后尝试断言从开始日期到当前日期的所有对象。

我正在返回结果,但它们似乎与过去 30 天的总数不匹配。它似乎只是返回一切!

有任何想法吗?

4

1 回答 1

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];
    
于 2012-11-17T15:38:06.737 回答