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

时间:2016-09-30 09:42:27

标签: ios objective-c uiimage nsdate phasset

我正在尝试从两个日期范围内的照片库中获取图片I am getting the images successfully.使用PHAsset库

现在问题是我不能在同一天的两次之间获取图像,如下午12:10到下午12:30

使用以下代码

#pdf-container {
    overflow:hidden;
    width:600px;
    height:800px;
}

-

    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;
} 

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

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

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

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

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