Я взял на себя проект некоторых программистов, которые, к сожалению, многое оставили неясным в коде.По сути, мы сохранили некоторые события полета в нашей базе данных с временем отправления и прибытия.В базе данных (насколько мы можем судить) все хранится в UTC (как и должно быть), и в приложении iOS они используют некоторые объекты Realm в качестве модели базы данных.
Я в основном хочу найти все полеты в24-часовой период, соответствующий 24-часовому дню устройства пользователя.
- (NSDate *)beginningOfDayInDeviceTimeZone {
NSDateComponents *components = [[NSDateComponents alloc] init];
components.day = [[NSCalendar currentCalendar] ordinalityOfUnit:(NSCalendarUnitDay) inUnit:(NSCalendarUnitEra) forDate:self];
return [[NSCalendar currentCalendar] dateFromComponents:components];
}
- (NSDate *)endOfDayInDeviceTimeZone {
NSDateComponents *components = [[NSDateComponents alloc] init];
components.day = [[NSCalendar currentCalendar] ordinalityOfUnit:(NSCalendarUnitDay) inUnit:(NSCalendarUnitEra) forDate:self];
components.day += 1;
return [[NSCalendar currentCalendar] dateFromComponents:components];
}
Так что, как я понимаю, все времена обычно являются метками времени Unix.Поэтому преобразование времени необходимо, только если я хочу отображать времяЯ предполагаю, однако, что наши программисты испортили это, но это другая история.
Я хочу запросить все события в этот период времени.Я хотел использовать метод, созданный нашими программистами:
+ (NSMutableArray *)getDataForUser:(NSString *)userEmail betweenStartDate:(NSDate *)startDate andEndDate:(NSDate *)endDate {
NSMutableArray *planDataArray = [NSMutableArray array];
NSLog(@"startDate %@ endDate: %@", startDate, endDate);
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"userEmail == %@ AND (destinationTime >= %@ AND departureTime <= %@)",userEmail, startDate, endDate, startDate, endDate, startDate];
NSLog(@"Predicate: %@", predicate); sortedResultsUsingProperty:@"departureTime" ascending:YES];
if (results.count > 0) {
for (FMPlanData *planData in results) {
if (![planData isInvalidated]) {
[planDataArray addObject:planData];
}
}
}
return planDataArray;
}
Вот мои вопросы:
Почему есть больше параметров (startDate и endDate), которые приведенык методу предиката, чем в строке предиката является% @?Что это делает?
NSLogs от меня.Вывод одного конкретного вызова теперь:
2019-04-02 16: 17: 07.849451 + 0200 FollowMe [4891: 158214] StartDate Tue Apr 2 00:00:00 2019
2019-04-02 16: 17: 07.849666 + 0200 FollowMe [4891: 158214] Конечная дата: ср. 3 апреля 00:00:00 2019
2019-04-02 16: 17: 07.849870 + 0200 FollowMe[4891: 158214] Предикат: userEmail == "xxx" AND destinationTime> = CAST (575848800.000000, "NSDate") и flightTime <= CAST (575935200.000000, "NSDate") </p>
Хорошо, и вот яя в замешательстве.Во-первых, мне показывают слишком много событий, что неправильно.Но что меня больше всего смущает, так это эти CAST (...) временные метки.Если я преобразую 575935200.000000 в обычную дату, я получу 1 апреля 1988 года. Где моя ошибка в мысли?