簡體   English   中英

使用核心數據ios swift獲取兩個日期之間的記錄

[英]Fetch records between two dates using core data 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 和 todate 是這種格式 2015-09-25 (as String)

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

3)我能夠成功地從核心數據中存儲和獲取日期

當我運行上面的代碼時,我沒有收到任何錯誤,但代碼沒有搜索兩個日期之間的記錄。 我的意思是我得到了空的結果數組。

任何人都可以告訴我我在這里做錯了什么。 另外請讓我知道是否需要更多信息。 提前致謝!

最后經過多次修改和測試,這對我有用,如下所示。 如果您需要如何在 coredata 中存儲 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)

我認為您的謂詞可能是錯誤的,請嘗試像這樣修改它: %@ <= date AND date <= %@

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM