【问题标题】:Predicate fails with fetching object with attribute type of "NSDate" object from Core Data谓词因从 Core Data 获取属性类型为“NSDate”对象的对象而失败
【发布时间】: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; }

标签: core-data nsdate nspredicate nsdateformatter nscalendar


【解决方案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 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-31
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    相关资源
    最近更新 更多