PHAsset creationDate返回一个NSDate,它被构造为好像所有的照片都是在相同的“主”时区拍摄的。例如,在给定的iPhone上,纽约下午4点拍摄的照片与加州下午4点拍摄的照片具有相同的creationDate。这很方便:只要您以"home“时区显示日期,它就会显示捕获照片的当地时间,这通常是您希望看到的。如果PHAsset返回一个协调世界时的creationDate,那么你需要知道它是在哪个时区拍摄的,这可能是iPhone所不知道的,而用户无论如何都想看到的本地拍摄时间可能会与任何照片一起提供。因此,照片框架只是将本地时间反向编码为NSDate,使用某个固定的时区。
有谁知道如何确定Photos框架使用的时区吗?更改iPhone设置(NSTimeZone systemTimeZone)似乎不会影响它,即使在系统重新启动后也是如此。是否有更稳定的系统时区?或者,这是Photos框架正在保存的东西吗?
我知道有一种方法可以确定它,那就是读取照片元数据,以获取照片被捕获时的本地时间。然后将其与PHAsset creationDate进行比较,以查看使用的偏移量。但是,如果有合法的方法来查询这个参数,那就太难看了。或者,更重要的是,知道在什么情况下它可能会改变。
这是一个在澳大利亚(GMT+10)拍摄的照片在加利福尼亚州(GMT-7)的iPhone上打开的示例: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与实际创建日期不匹配。相反,它是UTC时间,对应于加州时区的15:57:35。以下是照片中的元数据子集
{ "{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"; }; }
发布于 2016-09-12 01:17:42
正如我通过检查手机上的PHAsset行为所猜测的那样,并没有恒定的“家”timeZone。第一次保存照片时,将根据iPhone的当前时区和照片创建的本地时间(如果不是由iPhone摄像头捕获,则从jpeg元数据)计算UTC creationDate。因此,没有恒定的“主页”timeZone,而是根据照片的保存时间而不同。只要照片是在最初保存到iPhone的同一个timeZone中捕获的,那么creationDate就是正确的。
我看到的行为之所以发生,是因为我在不同时区拍摄的所有照片都是在一部较旧的iPhone上拍摄的,并带到了这部手机上。我看到的恒定的"home“时区仅仅是传输发生时的当前时区。这对正确显示当地时间有很好的副作用,所以我假设它是为在不同时区捕获的所有照片而设计的。
https://stackoverflow.com/questions/39430646
复制相似问题