gpt4 book ai didi

core-data - NSPredicate和CoreData-确定iOS上的Date属性是否为 "today"(或从昨晚12am到今晚12am)

转载 作者:行者123 更新时间:2023-12-04 04:55:39 29 4
gpt4 key购买 nike

我正在使用NSFetchedResultsControllerUITableViewController从CoreData数据库填充UITableView。

我有一个NSDate对象保存到此日期属性中,标记为“startTime”。然后,我尝试通过使用如下所示的NSPredicate仅提取当今的数据:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"startDate == %@",
todaysDate];

我得到零结果。我理解这是因为 NSDate对象仅保留秒数或毫秒数或自1970年1月1日以来的时间,对吗?因此,在同一天比较1111111111111和1111111111112是两个不同的 NSDate对象,它们不相等。

那么,如何格式化 NSPredicate来做到这一点呢?我将猜测它创建了两个 NSDate对象:一个是昨晚12点,另一个是今晚12点,比较startDate并查看它是否在这两个 NSDate之间。

我是 NSPredicate的新手,那么如何实现呢?

最佳答案

使用NSCompoundPredicate

NSPredicate *firstPredicate = [NSPredicate predicateWithFormat:@"startDate > %@", firstDate];
NSPredicate *secondPredicate = [NSPredicate predicateWithFormat:@"startDate < %@", secondDate];

NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:firstPredicate, secondPredicate, nil]];

今天早上 firstDate是凌晨12点,今晚 secondDate是凌晨12点。

P.S.以下是今天早上12点的方法:
NSCalendar *calendar = [NSCalendar calendar]; // gets default calendar
NSCalendarComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:[NSDate date]]; // gets the year, month, and day for today's date
NSDate *firstDate = [calendar dateFromComponents:components]; // makes a new NSDate keeping only the year, month, and day

要今晚凌晨12点,请更改 components.day

关于core-data - NSPredicate和CoreData-确定iOS上的Date属性是否为 "today"(或从昨晚12am到今晚12am),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9401466/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com