NSTimeZone:“UTC”和“GMT”有啥区别吗?

Posted

技术标签:

【中文标题】NSTimeZone:“UTC”和“GMT”有啥区别吗?【英文标题】:NSTimeZone: Any difference between "UTC" and "GMT"?NSTimeZone:“UTC”和“GMT”有什么区别吗? 【发布时间】:2013-02-03 12:39:54 【问题描述】:

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

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

【问题讨论】:

我比较确定这两者在 ios 中基本相同。 【参考方案1】:

根据the docs,CFTimeZone(以及扩展名NSTimeZone)使用来自TZ (or "Olsen") Database 的时区名称、缩写、GMT 偏移量和 DST 信息。

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

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

【讨论】:

感谢您的完美回答,我做梦也想不到更权威的!在语义上,我担心的一个原因是 Apple 文档似乎将通用时间称为 GMT(不是 UTC,正如我所预料的那样)。例如,Apple 将 NSDate 的 timeIntervalSinceReferenceDate 描述为“返回接收器与 2001 年 1 月 1 日格林威治标准时间的第一时刻之间的时间间隔”。但现在我已经习惯了,谢谢。【参考方案2】:

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

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

***上的文章:English | German

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

【讨论】:

【参考方案3】:

Apple's NSDateFormatter and Internet Dates article 使用[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]];

【讨论】:

以上是关于NSTimeZone:“UTC”和“GMT”有啥区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

关于GMT UTC CST和Linux时区设置

UTC 与 GMT - Java 与 .Net

GMT 和 UTC 一样吗? [复制]

UTC/GMT/CST/RTC

MySQL默认时间格式是UTC还是GMT?

各种时间格式(UTC、GMT等)及夏令时和冬令时