NSTimeZone:UTC和GMT之间有什么区别吗?

38

这五个陈述是否可以互换使用,或者是否有人知道使用它们会产生不同的结果?根据我的了解,它们是等效的,但我没有找到什么确凿的证据,GMT和UTC变体之间的潜在差异让我感到担忧。

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

我相对确定在iOS中这两者本质上是相同的。 - Hot Licks
3个回答

42
根据 文档CFTimeZone(及其扩展的NSTimeZone)使用来自TZ(或“Olsen”)数据库的时区名称、缩写、GMT偏移和DST信息。
查看源代码,你会发现尽管在语义上“GMT”和“UTC”有很大不同,但实际上它们并没有差别:“GMT”只是一个零偏移时区。 更新:虽然这个答案对于1968年4月9日之后的日期仍然正确,但当处理历史日期时,Cocoa似乎使用过去的GMT定义(而不是现代定义)。这意味着在1968年4月9日之前的日期中,GMT和UTC可能有所不同。详细阐述请参见这篇信息丰富的博客文章的结尾。

谢谢您提供完美的答案,我无法想象还有更权威的回答!在语义方面,我感到担忧的原因之一是苹果文档似乎将世界标准时间称为GMT(而不是我预期的UTC)。例如,苹果描述NSDate的timeIntervalSinceReferenceDate为“返回接收器和2001年1月1日第一个瞬间之间的间隔,GMT”。但现在我对此感到很舒适,谢谢。 - Clafou

7

在几乎所有情况下,GMT 意味着 UTC。
但今天,它是一个不准确的词。
不幸的是,苹果使用 GMT 这个术语,而应该使用 UTC。

自从 1928 年以来,GMT 不再指代 UTC 的意义,但不幸的是,在英国和非洲仍然使用此术语来表示西欧时间或夏令时。今天真正的 GMT 称为 UT,与 UTC 可以相差多达0.9秒。

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

然而,在一些计算机程序中(如邮件头),由于历史原因(unix),仍然被称为 GMT(意为UTC)。


4

Apple的NSDateFormatter和网络日期文章使用了[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]];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接