如何解决如何在Swift中的NSPredicate中使用日期对象到dd-MM-yyyy HH:mm:ss使用它
我有字典的arrData,我想在NSPredicate中使用prevDate和currDate根据PERSON_ID,p_punchTime(字符串dd-MM-yyyy HH:mm:ss)进行过滤
"aarData": [
{
"PERSON_ID": 100000000530788,"p_comments": "","p_person": " Amal Abutaleb","p_personId": "100000000530788","p_punchTime": "25-08-2020 10:32:53","p_punchType": IN,},{
"PERSON_ID": 100000000530788,"p_punchTime": "25-08-2020 10:32:59","p_punchType": OUT,}
]
如何在Swift的NSPredicate中使用日期对象/字符串(用于dd-MM-yyyy HH:mm:ss)。
当我在NSPredicate中传递strCurrdate和strPrevdate起作用但过滤器返回所有aarData时,NSPredicate中的字符串Date是否在过滤器中不起作用?
我的代码:
let formatter = DateFormatter()
formatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
let strCurrdate = formatter.string(from: (NHNetworkClock.shared()?.networkTime)! as Date )
let currdateObj = formatter.date(from: strCurrdate)! as NSDate
print("currdateObj : \(currdateObj)") //prints 2020-08-24 13:54:03 +0000,need dd-MM-yyyy HH:mm:ss
var dayComponent = DateComponents()
dayComponent.day = -1 // For removing one day (yesterday): -1
let theCalendar = Calendar.current
let prevDate = theCalendar.date(byAdding: dayComponent,to:(NHNetworkClock.shared()?.networkTime)! as Date)
print("prevDate : \(prevDate)")
let strPrevdate = formatter.string(from: prevDate!) //gives string dd-MM-yyyy HH:mm:ss
let prevDateObj = formatter.date(from: strPrevdate)! as NSDate
print("prevDateObj : \(prevDateObj)") //prints 2020-08-24 13:54:03 +0000,need dd-MM-yyyy HH:mm:ss
let resultPredicate = NSPredicate(format: "PERSON_ID CONTAINS %@ AND ( p_punchTime >= %@ AND p_punchTime <= %@)",NSString.init(format: "%@",Constants().EMPLOYEE_ID() as String),prevDateObj! as NSDate,currdateObj! as NSDate)
filteredArr = arrData.filtered(using: predicate) as NSArray
//NOTE: aarData contains p_punchTime in format string dd-MM-yyyy HH:mm:ss
日志
(lldb) po resultPredicate
PERSON_ID CONTAINS "100000000530788" AND p_punchTime >= CAST(619860816.000000,"NSDate") AND p_punchTime <= CAST(619947216.000000,"NSDate")
我遇到此错误
libc++abi.dylib: terminating with uncaught exception of type NSException
任何线索
解决方法
我将NSPredicate更改为字符串Date,现在可以正常工作
let resultPredicate = NSPredicate(format: "PERSON_ID == %@ AND (p_punchTime >= %@ AND p_punchTime <= %@)",NSString.init(format: "%@",Constants().EMPLOYEE_ID() as String),strPrevdate,strCurrdate )
filteredArr = arrData.filtered(using: resultPredicate) as NSArray
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。