这五个陈述是否可以互换,或者是否有人知道其使用会产生不同结果的情况?从我收集的内容来看,它们是等价的,但我没有找到任何结论,GMT和UTC变体之间的潜在差异使我担心。
[NSTimeZone timeZoneWithName:@"GMT"];
[NSTimeZone timeZoneWithName:@"UTC"];
[NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[NSTimeZone timeZoneWithAbbreviation:@"UTC"];
[NSTimeZone timeZoneForSecondsFromGMT:0];
答案 0 :(得分:37)
根据the docs,CFTimeZone
(扩展名为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。
(维基上的文章不存在于英语中,但存在于许多其他语言中 - 有趣: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]];
}