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

时间:2013-02-18 23:29:26

标签: ios utc gmt nstimezone

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

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

3 个答案:

答案 0 :(得分:37)

根据the docsCFTimeZone(扩展名为NSTimeZone)使用TZ (or "Olsen") Database中的时区名称,缩写,GMT偏移量和DST信息。

the source,你会看到虽然语义上“GMT”和“UTC”非常不同,但实际上它们并没有什么不同:“GMT”只是一个零偏移时区。

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

答案 1 :(得分:6)

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

格林威治标准时间不再存在于UTC(自1928年以来)的意义上,但在英国和非洲不幸的是,这个词仍然用于表示西欧时间或西欧夏令时。今天真正的GMT被称为UT,可以与UTC相差最多0.9秒。

(维基上的文章不存在于英语中,但存在于许多其他语言中 - 有趣:german link)。

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

答案 2 :(得分:4)

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]];
}