Фильтр даты PHFetchResults не дает правильных результатов для диапазона времени

Я пытаюсь получить изображения из библиотеки фотографий в диапазоне двух дат и Я успешно получаю изображения. Использование библиотеки PHAsset

Теперь проблема в том, что я не могу получать изображения между двумя временами в один и тот же день, например, с 12:10 до 12:30.

Используя приведенный ниже код

    NSDate *startDate = [self getDateForDay:30 andMonth:9 andYear:2016 andHour:12 andMinute:10 andSecond:0];
    NSDate *endDate = [self getDateForDay:30 andMonth:9 andYear:2016 andHour:12 andMinute:30 andSecond:0];

--

-(NSDate*) getDateForDay:(NSInteger) day andMonth:(NSInteger) month andYear:(NSInteger) year andHour:(NSInteger) hour andMinute:(NSInteger) minute andSecond:(NSInteger) second{
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:day];
[comps setMonth:month];
[comps setYear:year];

[comps setHour:hour];
[comps setMinute:minute];
[comps setSecond:second];
NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

NSDate *date = [gregorian dateFromComponents:comps];
return date;
} 

-- И передавая эти даты методу ниже, чтобы получить изображения

    PHFetchResult *result = [self getAssetsFromLibraryWithStartDate:startDate andEndDate:endDate];

Даты и время приходят правильно, когда я печатаю в журнале, но не получаю изображения

Как решить эту проблему ?


person Chandan Reddy    schedule 30.09.2016    source источник
comment
Вы правильно выставили часовой пояс? Дата, созданная здесь, будет в часовом поясе UTC, и у вас может отличаться. Убедитесь, что вы установили часовой пояс календаря, например [calendar setTimeZone: [NSTimeZone systemTimeZone]];, прежде чем создавать из него дату.   -  person NSNoob    schedule 30.09.2016
comment
А также убедитесь, что у вас есть изображения в библиотеке, которые существуют в пределах временного диапазона   -  person NSNoob    schedule 30.09.2016
comment
Проверьте мой отредактированный вопрос ... да, у меня есть изображения, это точно   -  person Chandan Reddy    schedule 30.09.2016
comment
Теперь вы создаете дату в часовом поясе GMT. Часовой пояс вашего телефона может отличаться. Вы находитесь в GMT или Великобритании?   -  person NSNoob    schedule 30.09.2016
comment
Чтобы проверить проблему с часовым поясом, просто продлите ограничения даты на пару часов.   -  person Rok Jarc    schedule 30.09.2016
comment
[NSTimeZone systemTimeZone] лучше, потому что он принимает часовой пояс, установленный на устройстве, поэтому он должен работать в любом часовом поясе. @rokjarc Думаю, это займет больше пары часов (+6?), Поскольку ОП, вероятно, находится в Индии.   -  person NSNoob    schedule 30.09.2016
comment
Я продлил ... но не работает @rokjarc   -  person Chandan Reddy    schedule 30.09.2016


Ответы (1)


Дата, созданная здесь, будет в часовом поясе UTC, и у вас может отличаться. Вот почему предикат может не вернуть вам правильные результаты.

Убедитесь, что вы установили часовой пояс календаря в системный часовой пояс, прежде чем создавать из него дату, например:

NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
[gregorian setTimeZone: [NSTimeZone systemTimeZone]];
NSDate *date = [gregorian dateFromComponents:comps];

Это создаст дату в вашем местном часовом поясе и даст правильные результаты.

person NSNoob    schedule 30.09.2016
comment
Я понял ... Большое спасибо @NSNoob за помощь с хет-триком, а также за то, что моя задача выполнена, ура :-) - person Chandan Reddy; 30.09.2016