NSPredicate, чтобы получить только сегодняшние события
Я использую EventKit.framework, чтобы получить события, хранящиеся в EKEventStore
,
Как я могу получить только сегодняшние события, т.е. с утра с 00:00 до 23:59 (с 00:00 до 23:59). Часовой пояс может быть чем угодно.
Я использую приведенный ниже фрагмент кода, но он также дает событие на следующий день. Это добавляет 24 часа к сегодняшней дате.
-(void) fetchEvents{
NSDate *startDate = [NSDate date] ;
//Create the end date components
NSDateComponents *tomorrowDateComponents = [[NSDateComponents alloc] init];
tomorrowDateComponents.day = 1;
NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:tomorrowDateComponents
toDate:startDate
options:0];
// We will only search the default calendar for our events
NSArray *calendarArray = [NSArray arrayWithObject:self.defaultCalendar];
// Create the predicate
NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:startDate
endDate:endDate
calendars:calendarArray];
// Fetch all events that match the predicate
NSMutableArray *events = [NSMutableArray arrayWithArray:[self.eventStore eventsMatchingPredicate:predicate]];
}
Как изменить NSPredicate
для вышеуказанного требования?
1 ответ
Если вам нужны сегодняшние события, есть много способов сделать это, но вы можете получить текущую дату / время, а затем попросить календарь установить дату начала и окончания на основе соответствующего часа, минуты и секунды.
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDate *startDate = [calendar dateBySettingHour:0 minute:0 second:0 ofDate:now options:0];
NSDate *endDate = [calendar dateBySettingHour:23 minute:59 second:59 ofDate:now options:0];
NSPredicate *predicate = [store predicateForEventsWithStartDate:startDate
endDate:endDate
calendars:nil];
NSArray *events = [store eventsMatchingPredicate:predicate];
Если ты хочешь endDate
быть 12:00 следующего дня, вы можете сделать:
NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];