cocoa – DATEADD的NSPredicate语法?

cocoa – DATEADD的NSPredicate语法?,第1张

概述有没有办法在NSPredicate上执行DateAdd或DateDiff函数? 谢谢, 何塞. 实际上,有!这是一种迂回的方式,因为NSPredicate不直接支持它(即,你不能只是anInterval到NSDate).幸运的是,你可以做到,幸运的是,我只是在2天前弄明白了. 澄清:我假设你要求的东西是:“一个对象有一个日期属性.我想看看这个日期属性是否是在另一个日期之前/之后的某个任意间隔”.如 有没有办法在nspredicate上执行DateAdd或DateDiff函数?
谢谢,
何塞.解决方法 实际上,有!这是一种迂回的方式,因为nspredicate不直接支持它(即,你不能只是anInterval到NSDate).幸运的是,你可以做到,幸运的是,我只是在2天前弄明白了.

澄清:我假设你要求的东西是:“一个对象有一个日期属性.我想看看这个日期属性是否是在另一个日期之前/之后的某个任意间隔”.如果这就是你的意思,那么是的,你可以做到.如果这不是您的意思,那么请澄清您的问题.

开始了.在这个例子中,我们将假设我们将评估此谓词的对象具有一个名为date的属性,该属性返回一个NSDate.我们将在另一个日期之前查看此日期是否至少1天.我们可以通过几种不同的方式进行比较:

date + 1 day is before comparisonDatedate is before comparisonDate - 1 day

我将采用第一种方法:

NSDate * comparisonDate = ...; //an arbitrary NSDate object,against which we're going to be doing our comparisonNSTimeInterval interval = 86400; //the number of seconds you want add or subtract.nspredicate * p = [nspredicate predicateWithFormat:@"CAST(CAST(date,'NSNumber') + %f,'NSDate') < %@",interval,comparisonDate];

这是怎么回事:

为了使这个工作,我们可以CAST()一个日期对象到NSNumber.这将把NSDate转换为一个NSNumber,它是参考时间点(例如1970年1月1日或其他)的几秒钟.对于该数字,我们添加或减去我们的间隔,然后将新数字转换回NSDate.然后我们可以使用常规比较运算符来比较我们的新日期和我们的比较日期.

这个想法有几个不同的变化,但它们都需要将NSDate转换为数字(或将数字转换为NSDate)以获得其时间间隔.

狡猾,嗯?

编辑

如果Core Data抱怨谓词的构造,请尝试颠倒:

NSDate * comparisonDate = ...;NSTimeInterval interval = 86400;nspredicate * p = [nspredicate predicateWithFormat:@"date < CAST(CAST(%@,'NSNumber') - %f,'NSDate')",comparisonDate,interval];

编辑#2

The Reverend偷走的雷声:http://tumblr.com/xqorqjfrz

总结

以上是内存溢出为你收集整理的cocoa – DATEADD的NSPredicate语法?全部内容,希望文章能够帮你解决cocoa – DATEADD的NSPredicate语法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1003621.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存