NSPredicate:比较没有时间的日期(目标 C)

Posted

技术标签:

【中文标题】NSPredicate:比较没有时间的日期(目标 C)【英文标题】:NSPredicate : Compare Date without time (Objective C) 【发布时间】:2013-04-04 06:17:22 【问题描述】:

我在表中有 DATE 数据类型的列。我想设置谓词,我想在其中只比较没有时间的日期。 由于日期的原因,我没有得到正确的结果。

我当前的代码 -

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"((install_date > %@) AND (install_date <= %@))", fromDate,toDate]]

【问题讨论】:

asap 意味着尽快兄弟 @Mak:谢谢,但这不应该是寻求任何帮助的礼仪。那之后的**是什么意思?条件适用?这就是我的意思。 请帮帮我。已经足够了。 通过删除您的时间并应用谓词,将您的日期转换为仅日期格式。 您只需根据需要将fromDatetoDate 更改为一天的开始/结束。请参阅此问题:***.com/q/13324633/937822,了解如何执行此操作的详细信息。 NSDate 变量总是包含时间。存储在数据库中的日期还包含时间。我只想比较存储在数据库中的 DATE 的日期部分。目前其比较 yyyy-mm-dd hh:mm:ss = yyyy-mm-dd hh:mm:ss。我不想比较时间值。 【参考方案1】:

我使用这个函数从 NSDate 中抽出时间

+(NSDate *)dateWithOutTime:(NSDate *)datDate

if( datDate == nil ) 
    datDate = [NSDate date];

NSDateComponents* comps = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:datDate];
return [[NSCalendar currentCalendar] dateFromComponents:comps];


我的建议是取出所有匹配的值,然后通过比较没有时间的日期来相应地过滤它们,因为你不能在 CoreData 中取出没有时间的日期,或者你必须先存储它没有时间。

【讨论】:

从日期[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay startDate:&amp;date interval:NULL forDate:date]; 中删除时间的更简单方法 PS:这会将日期设置为一天的开始,因此时间设置为 00:00:00 如果用户更改时区设置,此方法将中断。【参考方案2】:

我使用这个解决方案只比较没有时间的日期,在这种情况下我的日期格式是 yyyy-MM-dd:

NSDateFormatter * formatter = [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSString * dateString = [formatter stringFromDate:[NSDate date];
NSDate *rdate = [formatter dateFromString:dateString];

NSPredicate *datePre = [NSPredicate predicateWithFormat:@"date = %@", rdate];

【讨论】:

以上是关于NSPredicate:比较没有时间的日期(目标 C)的主要内容,如果未能解决你的问题,请参考以下文章

coredata NSPredicate 中的日期比较

使用 NSPredicate 比较日期以检索符合条件的对象

使用 NSPredicate 比较核心数据查询中的日期

NSPredicate - 核心数据 - 比较两个属性

如果没有“as CVarArg”,则无法将日期传递给 NSPredicate(format: ...)

NSPredicate 对一个查询字符串进行多重比较