【问题标题】:Core Data predicate for finding x days past since date用于查找自日期以来过去 x 天的核心数据谓词
【发布时间】:2014-02-18 14:57:03
【问题描述】:

我有核心数据模型:

Book
----
name 
release_date 

我需要获取自发布日期起至少两天后的所有书籍,
我想用NSPredicate 来做(不是把所有的书都加载到内存中,而是循环检查)

我正在寻找的是这样的:

NSDate *now = [NSDate date];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"release_date + "48 hours" <= %@", now];

【问题讨论】:

  • 一天不一定有 24 小时(想想夏令时转换)。

标签: ios iphone objective-c core-data nspredicate


【解决方案1】:

谓词不会为您更改日期。您应该创建适当的日期(基于当前日期,并使用NSDateComponents)并将其传递给谓词。您可以在谓词中使用 &lt;= 来过滤旧日期。


换句话说,不要把问题想成:

@"release_date + "48 hours" <= %@", now

把它想象成:

@"release_date <= %@", now - "48 hours"

所以你的问题只是让now - "48 hours" 日期传递给谓词。

【讨论】:

  • 我不想更改日期,我想获取从发布日期起至少两天过去的所有书籍。我将更新问题以更清楚
  • 我不是说谓词不会改变存储数据中的日期,我的意思是你需要计算适当的日期并将其传递给谓词,因为它不会在期间改变它比较。
【解决方案2】:

我想你想要这样的东西:

NSDate *date2DaysBefore = [NSDate dateWithTimeIntervalSinceNow:-2*24*3600];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"release_date <= %@", date2DaysBefore];

【讨论】:

  • 一天不一定有 24 小时(想想夏令时转换)。
  • 这不是一个准确的答案!!只是暗示可能解决他的问题。如果我们想要精确,我们应该格式化日期以删除时间组件,因为一本书的发行日期不包含小时和分钟......
猜你喜欢
  • 2017-03-11
  • 2013-03-27
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
相关资源
最近更新 更多