【问题标题】:Is + (NSTimeInterval)timeIntervalSinceReferenceDate timeZone sensitive?+ (NSTimeInterval)timeIntervalSinceReferenceDate 时区是否敏感?
【发布时间】:2012-10-19 10:09:02
【问题描述】:

如果在美国执行此操作的人与在美国执行此操作的人同时执行此操作,他们会看到相同的数字吗?

文档显示时间从格林威治标准时间 2001 年 1 月 1 日开始。这意味着它是从 GreenWitch 到 1 月 1 日的时间。

但是,每个人都会看到不同的时钟。所以这意味着它是本地化的。

所以它是模棱两可的。哪个是对的?

【问题讨论】:

标签: objective-c nsdate


【解决方案1】:

NSDate 不存储时区信息。它总是相对于 GMT/UTC 时间,这意味着你描述的两个人都会得到相同的结果。

【讨论】:

    【解决方案2】:

    不,根据文档:

    timeIntervalSinceReferenceDate

    返回值 系统绝对参考日期之间的时间间隔 (格林威治标准时间 2001 年 1 月 1 日的第一时间)和当前日期和 时间。

    当前日期取决于本地时间(+ (id)date)。因此,如果中国的一个人与德国的一个人同时按下按钮,则间隔会有所不同~6 小时。但在他们看来,如果他们在当地时间下午 1 点按下按钮,两者的时间间隔将是相同的。

    编辑:

    其实我错了,正如 Martin 指出的:

    一个 NSDate 代表一个时间点,对时间一无所知 区。如果你用 NSLog(@"%@", [NSDate date]) 然后将日期转换为使用 GMT 的字符串进行显示。

    所以回答你的问题:是的,它会是一样的。

    【讨论】:

    • 好吧,有人说这取决于你在哪里。另一个人说不,这不取决于当前时间。 [NSDate date] 的 NSLog 顺便显示的是 GMT 时间。
    • 正好相反:当前日期,即[NSDate date] 的结果依赖于本地时区。 - 如果两个人同时执行[[NSDate date] timeIntervalSinceReferenceDate],结果将是相同的。如果一个中国人在当地时间下午 1 点执行它,而一个德国人在当地时间下午 1 点执行它,结果会有所不同。
    • 哈,NSDate 真的显示 GMT 时间吗?因为我实际上住在格林威治标准时间(我住在法国国家),所以也许我做错了断言。我认为 NSDate 会给你你的实际时钟时间......嗯,这实际上很有趣。但是文档说 + date 创建并返回一个设置为当前日期和时间的新日期。因此,如果 NSDate 日期基于 GMT,您对问题的回答是肯定的,但如果 NSDate 日期不是 GMT,那么显然不是。
    • @MrBonjour:NSDate 代表一个时间点,对时区一无所知。如果您 显示 NSDateNSLog(@"%@", [NSDate date]) 的值,则日期将使用 GMT 转换为字符串以进行显示。
    • 没关系。我赞成你进行编辑。我不知道谁对你投了反对票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多