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:谢谢,但这不应该是寻求任何帮助的礼仪。那之后的**是什么意思?条件适用?这就是我的意思。 请帮帮我。已经足够了。 通过删除您的时间并应用谓词,将您的日期转换为仅日期格式。 您只需根据需要将fromDate
和toDate
更改为一天的开始/结束。请参阅此问题:***.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:&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)的主要内容,如果未能解决你的问题,请参考以下文章