NSDate 存储为 EPOCH,任何 NSDate 对象在作为参数到位时都会被转换。
所以你的查询会变成:
DBResultSet *today = [[[Actions query] whereWithFormat:@"end = %@", [NSDate date]] fetch];
显然,除非您存储并修剪日期的秒数以进行持久性或检索,否则这是行不通的。
它需要变成:
DBResultSet *today = [[[Actions query] whereWithFormat:@"end >= %@ AND end <= %@", beginingOfDay, endOfDay] fetch];
我们可以向 SQLite 添加一个内部函数来帮助更好地支持这些,欢迎提出任何建议。最好只重载现有函数。
如果你想总是存储一个没有秒精度的 NSDate,你总是可以在 entityWillInsert 方法中添加一些东西并创建一个 NSDate 的扩展来给你一天的开始,
- (BOOL)entityWillInsert {
self.end = [self.end dateTrimmedToStartOfDay];
return YES;
}
这可能是保持所有代码简单的更简单方法。
谢谢阿德里安