2015-09-25 72 views
2

我正試圖在swift中搜索兩個日期之間的記錄。 我存儲如下圖所示日期:使用核心數據在兩個日期之間提取記錄ios swift

 let date = NSDate() 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy'-'MM'-'dd HH':'mm':'ss" 

    println(date) // prints 2015-09-26 05:22:41 +0000 

    myreport.setValue(date, forKey: "date") 

而下面是我的代碼使用來獲取兩個日期之間的記錄NSPredicate:

let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd" 

    let startDate:NSDate = dateFormatter.dateFromString(fromdate)! 
    let endDate:NSDate = dateFormatter.dateFromString(todate)! 

    println(fromdate) // prints 2015-09-22 
    println(todate) // prints 2015-09-29 
    println(startDate) // prints 2015-09-21 20:00:00 +0000 
    println(endDate) // prints 2015-09-28 20:00:00 +0000 
    let predicate1 = NSPredicate(format: "%@ >= date AND %@ <= date", argumentArray: [startDate, endDate]) 

    let predicate = NSCompoundPredicate(type: NSCompoundPredicateType.OrPredicateType, subpredicates: [predicate1]) 
    // Set the predicate on the fetch request 
    request.predicate = predicate 
    request.sortDescriptors = [NSSortDescriptor(key: "report_id", ascending: false)] 
    var results : NSArray = context.executeFetchRequest(request, error: nil)! 

注:

1)我沒有fromdate並在此格式是這種格式2015-09-25(as字符串)

2)我的日期屬性的核心數據中的數據類型是NSDate

3)我能夠存儲並當我運行上面的代碼林沒有得到任何錯誤,但代碼不被兩個日期之間的搜索記錄獲取從核心數據成功

的日期。我的意思是我得到空結果數組。

任何一個PLZ可以告訴我什麼即時做錯在這裏。 如果還需要更多信息,請通知我。提前致謝!

+0

我認爲這可以幫助你http://stackoverflow.com/questions/15831600/core-data-predicate-date-comparison –

回答

5

最後經過多次修改和測試,這對我工作如下所示。如果你需要如何在coredata plz中存儲nsdate,請檢查上面的問題。

println(self.appdel.fromdate) // prints 2015-09-25 
    println(self.appdel.todate) // prints 2015-09-26 

    var fromdate = "\(self.appdel.fromdate) 00:00" // add hours and mins to fromdate 
    var todate = "\(self.appdel.todate) 23:59" // add hours and mins to todate 

    var context : NSManagedObjectContext = appdel.managedObjectContext! 
    var request = NSFetchRequest(entityName: "TblReportsP") 
    request.returnsObjectsAsFaults = false 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm" 
    dateFormatter.timeZone = NSTimeZone(name: "GMT") // this line resolved me the issue of getting one day less than the selected date 
    let startDate:NSDate = dateFormatter.dateFromString(fromdate)! 
    let endDate:NSDate = dateFormatter.dateFromString(todate)! 
    request.predicate = NSPredicate(format: "(date >= %@) AND (date <= %@)", startDate, endDate) 

    request.sortDescriptors = [NSSortDescriptor(key: "report_id", ascending: false)] 
    var results : NSArray = context.executeFetchRequest(request, error: nil)! 

    println(results.count) 
0

我覺得你的謂語可能是錯誤的,嘗試修改這樣的: %@ <= date AND date <= %@

這樣,你會看的date即開始和結束日期之間。

+0

我試過烏爾解決以上仍犯規作品。此外,我已編輯的問題,以添加一些打印語句,如何在我保存之前打印日期以及如何在搜索時使用日期。還有一件事是格式化日期在一天內減少。你可以在上面的打印語句中觀察它。 – user3606682

相關問題