PHFetchResults日期filter不会为时间范围生成正确的结果

我试图在两个日期范围内从照片库中获取图像, 我正在成功获取图像。 使用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]; 

当我在日志中打印但没有获取图像时,日期和时间正确

如何解决这个问题呢 ?

此处创建的日期将以UTC时区为准,您的日期可能会有所不同。 这就是谓词可能无法返回正确结果的原因。

在创建日期之前,请确保已将日历的时区设置为系统时区,如:

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

这将在您当地的时区创建日期并生成正确的结果。