核心数据:根据NSDate的时间组件过滤条目

时间:2012-06-11 08:35:21

标签: ios core-data nsdate nsfetchrequest scalar

我有一个属性为time的实体,其类型为Date。我只关心它的时间成分。生成类文件时,我选择使用标量属性作为基本数据类型。因此,使用NSTimeInterval代替NSDate

要存储time属性,我必须先解析NSDateFormatter字符串,然后再将其分配给实体:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"H:mm"];

NSTimeInterval time = [[dateFormatter dateFromString:@"19:20"] timeIntervalSince1970];
entity.time = time;

当使用谓词来获取记录时,我再次使用NSDateFormatter来“截断”日期组件:

NSDate *timeNow = [self.defaultDateFormatter dateFromString:
    [self.defaultDateFormatter stringFromDate:[NSDate date]]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"time >= %@", timeNow];
// build the rest of the NSFetchRequest...

问题是,所有记录都回来了:有些记录在time之前有timeNow个属性,有些记录在之后。当我使用timeNowtime与返回记录的[NSDate compare:]属性进行比较时,它实际上返回了正确的结果!

出了什么问题?

1 个答案:

答案 0 :(得分:2)

如果我理解得很好,你需要跟踪时间H:mm。日,月和年没有兴趣。正确?

如果您需要分钟分辨率(最大1440),为什么不使用int16_t?如果需要第二个分辨率(最大86400),为什么不使用int32_t,以及一些非常基本的方法从基本单元转换为最适合您需要的东西,如NSDateComponents用于NSCalendar计算? NSDate和NSTimeInterval不适合这项任务,是吗?