我使用Core Data存储我的数据模型对象。每个对象都有NSDate属性。
NSDate属性的格式如下:
2013-03-18 12:50:31 +0000
我需要创建谓词,该谓词只会在没有时间的情况下通过此值2013-03-18
获取对象。
答案 0 :(得分:11)
如果您的日期存储为实际日期,那么您应该使用它而不是格式化。您可以简单地创建一个谓词,检查日期是否在两个日期之间(有时间)。第一个日期是您的日期,时间为00:00:00,第二个日期是之后的一天。
// Create your date (without the time)
NSDateComponents *yourDate = [NSDateComponents new];
yourDate.calendar = [NSCalendar currentCalendar];
yourDate.year = 2013;
yourDate.month = 3;
yourDate.day = 18;
NSDate *startDate = [yourDate date];
// Add one day to the previous date. Note that 1 day != 24 h
NSDateComponents *oneDay = [NSDateComponents new];
oneDay.day = 1;
// one day after begin date
NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:oneDay
toDate:startDate
options:0];
// Predicate for all dates between startDate and endDate
NSPredicate *dateThatAreOnThatDay =
[NSPredicate predicateWithFormat:@"(date >= %@) AND (date < %@)",
startDate,
endDate]];
答案 1 :(得分:4)
虽然David展示了如何创建谓词,但我希望添加一种更简单的方法来生成0:00的日期
NSDate *startDate = [NSDate date];
NSTimeInterval lengthDay;
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit
startDate:&startDate
interval:&lengthDay
forDate:startDate];
startDate
现在包含代表当前时区0:00
的日期
NSDate *endDate = [startDate dateByAddingTimeInterval:lengthDay];
现在我们可以将它放入谓词
NSPredicate *daySpanPredicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date < %@)", startDate, endDate];
感谢MartinR的改进。