gpt4 book ai didi

ios - PHAsset creationDate使用哪个时区?

转载 作者:行者123 更新时间:2023-12-01 17:48:30 24 4
gpt4 key购买 nike

PHAsset creationDate返回一个NSDate,该NSDate的构造就像所有照片都是在同一“主”时区中拍摄的一样。例如,在给定的iPhone上,在纽约下午4点拍摄的照片与在加利福尼亚州下午4点拍摄的照片具有相同的creationDate。这很方便:只要您在“家庭”时区中显示日期,它就会显示捕获照片的本地时间,通常是您要查看的时间。如果PHAsset返回了UTC creationDate,那么您将需要知道在哪个时区捕获了该时间,iPhone甚至可能不知道,而用户想要查看的本地捕获时间很可能与任何照片。因此,Photos框架只是使用一些固定的时区将本地时间反向编码为NSDate。

有谁知道如何确定照片框架为此使用的时区?即使更改系统设置,更改iPhone设置([NSTimeZone systemTimeZone])似乎也不会影响它。是否有更稳定的系统时区?或者,这是Photos框架要保存的东西吗?

我知道一种确定方法,即读取照片元数据以获取捕获照片的本地时间。然后将其与PHAsset creationDate进行比较,以查看使用了什么偏移量。但是,如果存在查询此参数的合法方法,这将非常丑陋。或者,更重要的是,要知道它在什么条件下会改变。

这是在基于加利福尼亚(GMT-7)的iPhone上在澳大利亚(GMT + 10)拍摄的照片的示例:
PHAsset creationDate: 2015-03-09 22:57:35 +0000
Actual UTC capture date: 2015:03:09 05:57:34 +0000
Australian capture date: 2015:03:09 15:57:35 (GMT+10)

请注意,PHAsset creationDate与实际的创建日期不匹配。确切地说,它是与加利福尼亚时区的15:57:35相对应的UTC时间。这是照片中元数据的子集
{
"{Exif}" = {
DateTimeDigitized = "2015:03:09 15:57:35";
};
"{GPS}" = {
DateStamp = "2015:03:09";
TimeStamp = "05:57:34";
};
"{TIFF}" = {
DateTime = "2015:03:09 15:57:35";
};
}

最佳答案

正如我在检查手机上的PHAsset行为时所猜测的那样,没有固定的“家”时区。首次保存照片时,将根据iPhone的当前时区和创建照片的本地时间(根据jpeg元数据(如果iPhone相机未捕获)从UTC创建时间)估算UTC日期。因此,没有恒定的“home” timeZone,而是一个不同的时间,具体取决于保存照片的时间。只要照片是在第一次保存到iPhone的同一timeZone中捕获的,那么creationDate将是正确的。

我看到的行为仅是因为我在不同时区拍摄的所有照片都在较旧的iPhone上捕获并转发到该iPhone。我看到的恒定的“本地”时区只是该转移发生时的当前时区。正确显示本地时间具有很好的副作用,因此我假设这是设计使然,适用于在不同时区捕获的所有照片。

关于ios - PHAsset creationDate使用哪个时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39430646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com