我正在使用模型中的日期类型成功地在Core数据中保存日期。日期以2017-04-02 14:56:41的格式保存。当我后退时,我想用当前日期文本字段过滤日期,其格式类似于2017年4月2日。我使用谓词来比较两个日期,但是应用程序由于差异而崩溃,或者可能是当前日期是字符串。
let predicate = NSPredicate(format: "(dateSchedule >= %@ )", fromTextField.text!)
核心数据日期:2017-04-02 14:56:41 currentdate textfield date:2017年4月2日
任何帮助?
答案 0 :(得分:0)
我假设 dateSchedule 是coredata中的日期。
您可以在日期变量上转换文本(确保格式正确)
let dateString = "2017-04-02 14:56:41"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
let dateObj = dateFormatter.date(from: dateString)
然后创建谓词:
let predicate = NSPredicate(format: "(dateSchedule >= %@ )", dateObj)
编辑:
如果日期时间令您烦恼,您可以使用这样的实用程序:
https://github.com/erica/SwiftDates
所以你可以过滤:
let predicate = NSPredicate(format: "(dateSchedule >= %@ )", dateObj.startOfDay)
通过这种方式,您将删除时间部分并在当天开始时进行过滤
答案 1 :(得分:0)
我会用这种方式格式化日期:
let dateFormatter = Dateformatter()
dateFormatter.timeStyle = .none
dateFormatter.dateStyle = .medium
您可以将此应用于某个日期,并将其作为字符串形式:
whatever you are saving it as = dateFormatter.string(from: Date())
然后你会得到这样的日期," 2017年3月17日"。
这种使用日期格式化程序的方式在您的情况下非常实用。
当你拿到时,你只需要这样做:
let predicate = NSPredicate(format: "(dateSchedule >= %@ )", fromTextField.text!)
但我建议你改用UIDatePickerView:
let predicate = NSPredicate(format: "(dateSchedule >= %@ ), dateFormatter.string(from: datePickerView.date)")