0

我有一个带有属性的实体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:],它实际上返回了正确的结果!

哪里出错了?

4

1 回答 1

2

如果我理解得很好,您需要跟踪时间 H:mm。日、月、年是没有意义的。对?

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

于 2012-06-11T10:15:32.037 回答