我有这段代码,它尝试获取按creationDate
排序的所有图像
PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.sortDescriptors = @[
[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES],
];
switch (type) {
case MMAssetsPhoto:{
fetch = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:options];
break;
}
case MMAssetsVideo:{
options.includeAssetSourceTypes = PHAssetSourceTypeiTunesSynced | PHAssetSourceTypeCloudShared | PHAssetSourceTypeUserLibrary | PHAssetSourceTypeNone;
fetch = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:options];
break;
}
default:{
options.includeAssetSourceTypes = PHAssetSourceTypeUserLibrary;
fetch = [PHAsset fetchAssetsWithOptions:options];
break;
}
}
[fetch enumerateObjectsUsingBlock:^(PHAsset * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
EkoLog(@"=======");
EkoLog(@"asset %@", obj);
EkoLog(@"create date %@", obj.creationDate);
EkoLog(@"modification date %@", obj.modificationDate);
}];
但这是我得到的一些图像的日志
=======
asset <PHAsset: 0x10d075bd0> D27FB9E1-53F0-4884-A0EA-C6E839A6A0FB/L0/001 mediaType=1/0, sourceType=1, (4032x3024), creationDate=2017-01-05 11:54:50 +0000, location=0, hidden=0, favorite=0
create date 2017-01-05 11:54:50 +0000
modification date 2017-01-05 11:54:50 +0000
=======
asset <PHAsset: 0x10d075d20> 18EA7D99-9FB7-4941-9E7A-E0C68F5F791B/L0/001 mediaType=1/0, sourceType=1, (4032x3024), creationDate=2560-01-05 14:03:59 +0000, location=0, hidden=0, favorite=0
create date 2560-01-05 14:03:59 +0000
modification date 2017-01-05 14:04:00 +0000
=======
asset <PHAsset: 0x10d075e70> 41871302-553F-4BF0-AA8C-E6AC177E0068/L0/001 mediaType=1/0, sourceType=1, (3024x4032), creationDate=2560-01-05 14:15:57 +0000, location=0, hidden=0, favorite=0
create date 2560-01-05 14:15:57 +0000
modification date 2017-02-04 21:08:48 +0000
如您所见,有些图像的 creationDate
为 2560
,即佛教日历中的 2017
年。这会导致排序将带有佛历的图像排在最后,这是错误的。
我不明白为什么这是正确的,因为当我从 modificationDate
看到它时,我得到了正确的 2017
年份
有办法解决这个问题吗?
更新
对我来说看起来像 Apple bug 因为在照片应用程序中这些图像是在 3103 年......
最佳答案
没有 Apple 错误。图像中存储的日期信息不正确。 NSDate 未连接到日历。您可以将其视为自 1970 年以来的秒数的简单包装器。日志不是使用不同的日历打印的——日期没有日历。这些图像的日期在 公历 年 2560 年 - future 543 年。
我认为有一个程序员不理解日历和日期之间的区别,并在图像的元数据中存储了错误的日期信息。这些图片的来源是什么?
关于ios - 为什么我在 PHAsset 中得到了两种不同的日历类型的 creationDate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42084919/