我有一个属性为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
个属性,有些记录在之后。当我使用timeNow
将time
与返回记录的[NSDate compare:]
属性进行比较时,它实际上返回了正确的结果!
出了什么问题?
答案 0 :(得分:2)
如果我理解得很好,你需要跟踪时间H:mm。日,月和年没有兴趣。正确?
如果您需要分钟分辨率(最大1440),为什么不使用int16_t?如果需要第二个分辨率(最大86400),为什么不使用int32_t,以及一些非常基本的方法从基本单元转换为最适合您需要的东西,如NSDateComponents用于NSCalendar计算? NSDate和NSTimeInterval不适合这项任务,是吗?