PHFetchResults 日期过滤器没有为时间范围生成正确的结果
Posted
技术标签:
【中文标题】PHFetchResults 日期过滤器没有为时间范围生成正确的结果【英文标题】:PHFetchResults date filter not generating correct results for time range 【发布时间】:2016-09-30 09:42:26 【问题描述】:我正在尝试从两个日期范围内的照片库中获取图像,I am getting the images successfully. 使用 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 时区,您的日期可能会有所不同。确保在创建日期之前已设置日历的时区,例如[calendar setTimeZone: [NSTimeZone systemTimeZone]];
并且还要确保您的库中有在时间范围内存在的图像
检查我编辑过的问题...你肯定有图片
现在您正在创建 GMT 时区的日期。您手机的时区可能不同。您是否位于 GMT aka UK?
要测试时区问题,只需将日期限制延长几个小时。
【参考方案1】:
此处创建的日期将采用 UTC 时区,您的日期可能会有所不同。这就是谓词可能无法返回正确结果的原因。
在创建日期之前,请确保您已将日历的时区设置为系统时区,例如:
NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
[gregorian setTimeZone: [NSTimeZone systemTimeZone]];
NSDate *date = [gregorian dateFromComponents:comps];
这将在您当地的时区创建日期并生成正确的结果。
【讨论】:
你明白了......非常感谢@NSNoob 的帽子戏法帮助,我的任务也完成了欢呼:-)以上是关于PHFetchResults 日期过滤器没有为时间范围生成正确的结果的主要内容,如果未能解决你的问题,请参考以下文章