PHAsset creationDate使用什么时区?

时间:2016-09-10 21:17:37

标签: ios nsdate nstimezone photosframework

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

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

我知道一种可以确定它的方法,即读取照片元数据以获取拍摄照片时的当地时间。然后将其与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"; }; }

1 个答案:

答案 0 :(得分:5)

没有恒定的“家庭”时区,正如我在手机上检查PHAsset行为所猜测的那样。首次保存照片时,将根据iPhone的当前时区和照片创建的当地时间(如果未通过iPhone相机捕获的jpeg元数据)估算UTC creationDate。因此,没有恒定的“家庭”时区,而是根据照片保存的时间而不同。只要照片是在第一次保存到iPhone的同一时区拍摄的,那么creationDate就是正确的。

我所看到的行为只是因为我在不同时区拍摄的所有照片都是在较旧的iPhone上拍摄的,然后转移到了这张照片上。我看到的恒定“家”时区只是转移发生时的当前时区。这有正确显示当地时间的副作用,所以我认为它是按照设计在不同时区拍摄的所有照片。