38

这五个陈述是否可以互换,或者是否有人知道使用它们会产生不同结果的情况?从我收集的信息来看,它们是等价的,但我还没有发现任何结论,GMT 和 UTC 变体之间的潜在差异让我担心。

[NSTimeZone timeZoneWithName:@"GMT"];
[NSTimeZone timeZoneWithName:@"UTC"];
[NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[NSTimeZone timeZoneWithAbbreviation:@"UTC"];
[NSTimeZone timeZoneForSecondsFromGMT:0];
4

3 回答 3

42

根据文档CFTimeZone(以及扩展, )使用来自TZ(或“Olsen”)数据库NSTimeZone的时区名称、缩写、GMT 偏移量和 DST 信息。

查看源代码,您会发现虽然语义上的“GMT”和“UTC”截然不同,但实际上它们并没有什么不同:“GMT”只是一个零偏移时区。

更新:虽然这个答案对于 1968 年 4 月 9 日之后的日期仍然有效,但在处理历史日期时,Cocoa 似乎使用了在相关日期有效的 GMT 过去定义(而不是现代定义)。这意味着 1968 年 4 月 9 日之前的日期的 GMT 和 UTC 可能不同。有关详细说明,请参阅此内容丰富的博客文章的末尾。

于 2013-02-19T00:45:22.213 回答
7

GMT 在几乎所有情况下都意味着 UTC。
但今天,它的本意是错误的。
不幸的是,Apple 使用术语 GMT,而它应该使用 UTC。

GMT 在 UTC 的意义上不再存在(自 1928 年以来),但不幸的是,在英国和非洲,该术语仍用于表示西欧时间或西欧夏令时。今天真正的 GMT 称为 UT,与 UTC 最多相差 0.9 秒。

维基百科上的文章:英文| 德语

但是在某些计算机程序(邮件标题)中,由于历史原因(unix),它仍然被称为 GMT(在 UTC 的意义上)

于 2013-02-19T12:34:33.100 回答
4

Apple 的 NSDateFormatter 和 Internet 日期文章使用[NSTimeZone timeZoneForSecondsFromGMT:0]

static NSDateFormatter *    sRFC3339DateFormatter;
NSString *                  userVisibleDateTimeString;
NSDate *                    date;

// If the date formatters aren't already set up, do that now and cache them
// for subsequence reuse.

if (sRFC3339DateFormatter == nil) {
    NSLocale *                  enUSPOSIXLocale;

    sRFC3339DateFormatter = [[NSDateFormatter alloc] init];

    enUSPOSIXLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];

    [sRFC3339DateFormatter setLocale:enUSPOSIXLocale];
    [sRFC3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
    [sRFC3339DateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
}
于 2016-02-19T05:54:16.867 回答