谓词因从 Core Data 获取属性类型为“NSDate”对象的对象而失败
Posted
技术标签:
【中文标题】谓词因从 Core Data 获取属性类型为“NSDate”对象的对象而失败【英文标题】:Predicate fails with fetching object with attribute type of "NSDate" object from Core Data 【发布时间】:2014-02-09 19:17:57 【问题描述】:我从互联网收到的日期格式如下:
“2014-12-01T20:00:00Z”
我正在以这种格式在核心数据中存储日期..属性类型也是“Nsdate”类型..
- (NSDateFormatter *)dateFormate
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy'-'dd'-'MM'T'HH':'mm':'ssZZZ"];
使用
获取 [NSDate Date] 的开始时间- (NSDate *)cc_dateByMovingToBeginningOfDay
unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents* parts = [[NSCalendar currentCalendar] components:flags fromDate:self];
[parts setHour:0];
[parts setMinute:0];
[parts setSecond:0];
return [[NSCalendar currentCalendar] dateFromComponents:parts];
[NSDate Date] 的结束时间,使用:
- (NSDate *)cc_dateByMovingToEndOfDay
unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents* parts = [[NSCalendar currentCalendar] components:flags fromDate:self];
[parts setHour:23];
[parts setMinute:59];
[parts setSecond:59];
return [[NSCalendar currentCalendar] dateFromComponents:parts];
并用这个获取:
- (void)ObjectsFrom:(NSDate *)fromDate to:(NSDate *)toDate
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"((due_at > %@) AND (due_at < %@))",fromDate, toDate];
但记录始终为零。因为我知道在我今天的日期我在数据库中有多个记录..我不知道为什么会发生这种情况..
我也使用 NSComparisonResult 作为日期但是没有记录是在日期之间。
所以请帮我解决这个问题..
【问题讨论】:
我已经像这样完成了 NSComparisonResult 但它也失败了.. static BOOL IsDateBetweenInclusive(NSDate *date, NSDate *begin, NSDate *end) return [date compare:begin] != NSOrderedAscending && [日期比较:结束]!= NSOrderedDescending; 【参考方案1】:您的日期格式错误。 “2014-12-01T20:00:00Z”中的“Z”是“ISO8601时区格式”,需要日期格式为“ZZZZZ”:
[formatter setDateFormat:@"yyyy'-'dd'-'MM'T'HH':'mm':'ssZZZZZ"];
否则dateFromString:
将返回nil
。
见http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns 了解更多信息。
【讨论】:
以上是关于谓词因从 Core Data 获取属性类型为“NSDate”对象的对象而失败的主要内容,如果未能解决你的问题,请参考以下文章
在 Core Data 可转换字符串数组上返回匹配项的 Swift 谓词