ios - 为什么我在 PHAsset 中得到了两种不同的日历类型的 creationDate?

标签 ios phasset

我有这段代码,它尝试获取按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

如您所见,有些图像的 creationDate2560,即佛教日历中的 2017 年。这会导致排序将带有佛历的图像排在最后,这是错误的。

我不明白为什么这是正确的,因为当我从 modificationDate 看到它时,我得到了正确的 2017 年份

有办法解决这个问题吗?

更新

对我来说看起来像 Apple bug 因为在照片应用程序中这些图像是在 3103 年......

最佳答案

没有 Apple 错误。图像中存储的日期信息不正确。 NSDate 未连接到日历。您可以将其视为自 1970 年以来的秒数的简单包装器。日志不是使用不同的日历打印的——日期没有日历。这些图像的日期在 公历 年 2560 年 - future 543 年。

我认为有一个程序员不理解日历和日期之间的区别,并在图像的元数据中存储了错误的日期信息。这些图片的来源是什么?

关于ios - 为什么我在 PHAsset 中得到了两种不同的日历类型的 creationDate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42084919/

相关文章:

ios - 如何从 PC 访问通过 iTunes 同步的 iPhone 中的视频

android - iOS 和 Android 应用程序的 cors header 白名单

ios - 如何更改 UIKit 中的 SF Symbol 图标颜色?

iOS 位置管理器在手机锁定约 10 分钟后停止

ios - PHChange changeDetailsForFetchResult - 总是返回 nil

ios - PHAssetResource.assetResources(对于 : asset). first.OriginalFilename 在 300 个 Assets 后给出 nil

ios - Firebase crashlytics 报告我的应用程序中存在许多可用的崩溃见解

iphone - 要求 iphone 设备方向刷新

ios - 嵌套 UIScrollViews 并在滚动发生时获取信息

iOS 团体照片库照片(按类别)