Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何通过NSDate属性筛选领域对象_Swift_Nsdate_Realm - Fatal编程技术网

Swift 如何通过NSDate属性筛选领域对象

Swift 如何通过NSDate属性筛选领域对象,swift,nsdate,realm,Swift,Nsdate,Realm,我正在尝试筛选领域对象,以查找那些日期小于一年的createdAt对象: let datex = NSCalendar.currentCalendar().startOfDayForDate(NSDate()).dateByAddingTimeInterval(-1*365*24*60*60) let list = RealmDB.objects(TaskList).filter("createdAt <= '\(datex)'") 让datex=NSCalendar.currentCa

我正在尝试筛选领域对象,以查找那些日期小于一年的
createdAt
对象:

let datex = NSCalendar.currentCalendar().startOfDayForDate(NSDate()).dateByAddingTimeInterval(-1*365*24*60*60)
let list = RealmDB.objects(TaskList).filter("createdAt <= '\(datex)'")
让datex=NSCalendar.currentCalendar().startOfDayForDate(NSDate()).dateByAddingTimeInterval(-1*365*24*60*60)

让list=RealmDB.objects(TaskList).filter(“createdAt直接的问题是,您正在使用Swift的字符串插值来构建谓词,而不是使用
NSPredicate
的参数替换。这导致谓词类似于:

createdAt <= '2015-03-19 07:00:00 +0000'
请注意,在闰日、闰秒、夏时制造成的中断等情况下,您计算日期的方式是不正确的。您应该使用
NSCalendar
的方法进行日期计算,而不是使用神奇常数进行计算:

let calendar = NSCalender.currentCalendar()
let datex = calendar.dateByAddingUnit(.Year, value: -1, toDate: calendar.startOfDayForDate(NSDate()), options: [.MatchFirst])
请记住,
NSDate
表示独立于任何时区的单个时间点。
NSDate
的默认格式,在
-[NSDate description]时使用调用
时,恰好以UTC格式设置日期。如果要使用其他时区将日期格式设置为字符串,可以使用
NSDateFormatter并显式设置时区

let calendar = NSCalender.currentCalendar()
let datex = calendar.dateByAddingUnit(.Year, value: -1, toDate: calendar.startOfDayForDate(NSDate()), options: [.MatchFirst])