PHAsset creationDate使用哪个时区?

use*_*568 1 nsdate nstimezone ios photosframework

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"; }; }

use*_*568 5

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

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