【发布时间】:2012-10-19 10:09:02
【问题描述】:
如果在美国执行此操作的人与在美国执行此操作的人同时执行此操作,他们会看到相同的数字吗?
文档显示时间从格林威治标准时间 2001 年 1 月 1 日开始。这意味着它是从 GreenWitch 到 1 月 1 日的时间。
但是,每个人都会看到不同的时钟。所以这意味着它是本地化的。
所以它是模棱两可的。哪个是对的?
【问题讨论】:
标签: objective-c nsdate
如果在美国执行此操作的人与在美国执行此操作的人同时执行此操作,他们会看到相同的数字吗?
文档显示时间从格林威治标准时间 2001 年 1 月 1 日开始。这意味着它是从 GreenWitch 到 1 月 1 日的时间。
但是,每个人都会看到不同的时钟。所以这意味着它是本地化的。
所以它是模棱两可的。哪个是对的?
【问题讨论】:
标签: objective-c nsdate
NSDate 不存储时区信息。它总是相对于 GMT/UTC 时间,这意味着你描述的两个人都会得到相同的结果。
【讨论】:
不,根据文档:
timeIntervalSinceReferenceDate
返回值 系统绝对参考日期之间的时间间隔 (格林威治标准时间 2001 年 1 月 1 日的第一时间)和当前日期和 时间。
当前日期取决于本地时间(+ (id)date)。因此,如果中国的一个人与德国的一个人同时按下按钮,则间隔会有所不同~6 小时。但在他们看来,如果他们在当地时间下午 1 点按下按钮,两者的时间间隔将是相同的。
编辑:
其实我错了,正如 Martin 指出的:
一个 NSDate 代表一个时间点,对时间一无所知 区。如果你用 NSLog(@"%@", [NSDate date]) 然后将日期转换为使用 GMT 的字符串进行显示。
所以回答你的问题:是的,它会是一样的。
【讨论】:
[NSDate date] 的结果不依赖于本地时区。 - 如果两个人同时执行[[NSDate date] timeIntervalSinceReferenceDate],结果将是相同的。如果一个中国人在当地时间下午 1 点执行它,而一个德国人在当地时间下午 1 点执行它,结果会有所不同。
NSDate 代表一个时间点,对时区一无所知。如果您 显示 NSDate 和 NSLog(@"%@", [NSDate date]) 的值,则日期将使用 GMT 转换为字符串以进行显示。