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 日期过滤器没有为时间范围生成正确的结果的主要内容,如果未能解决你的问题,请参考以下文章

php怎么将指定日期转换为时间戳

Python时间转换函数:时间转化为时间戳时间戳转化为时间当前日期当前时间星期几前面或者后面多少天年月日等

sql server 怎样将字符串转化为时间格式

将日期 unix 转换为时间戳

如何将日期转换为时间戳?

如何将日期和时间转换为时间戳