核心datedate从dateselect器文本字段比较

我正在模型中使用datetypes成功保存date在核心数据。 date保存格式如2017-04-02 14:56:41。 当我retreive我想过滤date与当前date文本字段有一个像2017年4月2日的格式。我使用谓词比较两个date,但应用程序由于差异坠毁或可能是当前date是在string中。

let predicate = NSPredicate(format: "(dateSchedule >= %@ )", fromTextField.text!) 

核心数据date:2017-04-02 14:56:41 currentdate textfielddate:2017年4月2日

任何帮助?

我假设dateSchedule是coredata中的date

你可以转换你的文本datevariables(确保格式是正确的)

 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) 

然后你创build谓词:

 let predicate = NSPredicate(format: "(dateSchedule >= %@ )", dateObj) 

编辑:

如果date的时间很烦人,你可以使用这样的工具:

https://github.com/erica/SwiftDates

所以你可以过滤:

 let predicate = NSPredicate(format: "(dateSchedule >= %@ )", dateObj.startOfDay) 

这样你就可以删除时间部分,并在一天的开始时进行过滤

我会这样格式化date:

 let dateFormatter = Dateformatter() dateFormatter.timeStyle = .none dateFormatter.dateStyle = .medium 

你可以把它应用到一个date,并像这样获得一个string:

  whatever you are saving it as = dateFormatter.string(from: Date()) 

那么你会得到这样的date,“2017年3月17日”。

这种使用date格式化程序的方式在您的情况下非常实用。

当你提取你时,也是这样做的:

  let predicate = NSPredicate(format: "(dateSchedule >= %@ )", fromTextField.text!) 

但我会build议你使用一个UIDatePickerView:

  let predicate = NSPredicate(format: "(dateSchedule >= %@ ), dateFormatter.string(from: datePickerView.date)")