Ios Swift coreData-格式化日期并在谓词中使用

Ios Swift coreData-格式化日期并在谓词中使用,ios,swift,core-data,nspredicate,Ios,Swift,Core Data,Nspredicate,H。 我有一个名为agendate的实体和一个名为AgendaEvent的实体。 AgendaEvent与AgendaDate(agendaDates)有多对多关系 在我的agendate中,我有一个对象dates(日期类型) 我使用这样一个谓词: fetchRequest.predicate = NSPredicate(format: "ANY agendaDates.dates == %@", date as CVarArg) 我正在尝试设置日期格式,以便: “dd-MM-yyyy”而不是

H。 我有一个名为agendate的实体和一个名为AgendaEvent的实体。 AgendaEvent与AgendaDate(agendaDates)有多对多关系

在我的agendate中,我有一个对象dates(日期类型)

我使用这样一个谓词:

fetchRequest.predicate = NSPredicate(format: "ANY agendaDates.dates == %@", date as CVarArg)
我正在尝试设置日期格式,以便:

“dd-MM-yyyy”而不是“yyy-MM-dd-hh:MM:ss”

我需要在谓词中比较两个日期,但没有时间? 可能吗

更新----- 以下是我的功能,按照您的建议进行了更新:

func agendaEventsWithDate(date: Date) -> NSFetchRequest<AgendaEvent>
{
    // create a fetch request that will retrieve all the AgendaEvents.
    let fetchRequest = NSFetchRequest<AgendaEvent>(entityName: "AgendaEvent")

    // set the predicate to only keep AgendaEvents where the related AgendaDate's date matches the passed in date.
    let cal = Calendar.current
    let startOfDay = cal.startOfDay(for: eventDate)
    let endOfDay = cal.date(byAdding: .day, value: 1, to: startOfDay)!
    print(startOfDay)
    print(endOfDay)
    // fetchRequest.predicate = NSPredicate(format: "ANY agendaDates.agendaDates == %@", date as CVarArg)
     fetchRequest.predicate = NSPredicate(format: "SUBQUERY(agendaDates, $a, $a.dates >= %@ AND $a.dates < %@).@count > 0",
                                startOfDay as NSDate, endOfDay as NSDate)

    return fetchRequest
}

不要为此使用自定义字符串格式。你想去拿吗 与带有日期的AgentDate对象相关的所有条目 在给定日期的同一天

因此,首先计算当天的开始和结束时间:

let date = Date()

let cal = Calendar.current
let startOfDay = cal.startOfDay(for: date)
let endOfDay = cal.date(byAdding: .day, value: 1, to: startOfDay)!
然后使用此子查询:

let predicate = NSPredicate(format: "SUBQUERY(agendaDates, $a, $a.dates >= %@ AND $a.dates < %@).@count > 0",
                            startOfDay as NSDate, endOfDay as NSDate)
let predicate=NSPredicate(格式:“子查询(agendates,$a,$a.dates>=%@和$a.dates<%@)。@count>0”,
开始日期为NSDate,结束日期为NSDate)
它测试所有数据的
$a.dates>=startDate和$a.dates
如果至少有一个匹配项,则生成true
条件。

您是否在告诉核心数据中的日期有hh:mm:ss,并且您希望在谓词中进行比较时将其删除?@sandepbhandari是的。堆芯内的数据也随时间而存储。当我在谓词中使用它来比较它时,我希望日期没有time@SandeepBhandari)谢谢!对不起,伙计,我帮不了什么忙。。无论如何,谢谢你的努力!:)谢谢你的回答。也许我还没有真正理解。我试图在数组中附加所有具有特定agendaDate的AgendaEvent。所以基本上我选择了一个日期。如果日期与agendate中存在的日期匹配,则我希望将这些AgendaEvent存储在数组中。也许我做错了什么,但如果我添加了你的解决方案,它会占用所有代理事件。我将编辑我的问题,以便您可以查看我的代码。感谢you@Marco:我建议的谓词应该这样做。我注意到在您的代码中谓词赋值被注释掉了:
//fetchRequest.predicate=…
,所以所有的对象都被提取。我得到了这个可选的(子查询(agendates,$a,$a.dates>=CAST(526860000.000000,“NSDate”)和$a.dates0@马可:那应该可以获取与(至少)一个日期为2017-09-12的Agendadate相关的所有对象(假设您在GMT+2时区)。@Marco:我不明白。这里没有涉及格式。您说您使用的是核心数据类型“Date”(这很好),因此日期在数据库中存储为数字(自2001年1月1日GMT起的秒数),而不是字符串。
let predicate = NSPredicate(format: "SUBQUERY(agendaDates, $a, $a.dates >= %@ AND $a.dates < %@).@count > 0",
                            startOfDay as NSDate, endOfDay as NSDate)