NSTimeZone: Любая разница между "UTC" и "GMT"?
Являются ли эти пять операторов взаимозаменяемыми или кто-нибудь знает о случаях, когда их использование принесет разные результаты? Из того, что я собираю, они эквивалентны, но я не нашел ничего убедительного, и потенциальные различия между вариантами GMT и UTC беспокоят меня.
[NSTimeZone timeZoneWithName:@"GMT"];
[NSTimeZone timeZoneWithName:@"UTC"];
[NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[NSTimeZone timeZoneWithAbbreviation:@"UTC"];
[NSTimeZone timeZoneForSecondsFromGMT:0];
Ответы
Ответ 1
В соответствии с документами CFTimeZone
(и по расширению NSTimeZone
) используются имена часовых поясов, аббревиатуры, смещение по GMT и данные DST из База данных TZ (или Olsen).
Посмотрев источник, вы увидите, что в то время как семантически "GMT" и "UTC" довольно различны, на практике они ничем не отличаются: "GMT" - это только часовой пояс с нулевым смещением.
Обновление. Хотя этот ответ остается верным для дат позже 9 апреля 1968 года, когда речь идет о исторических датах, он показывает, что Cocoa использует прошлые определения GMT, которые были действительны на дату, о которой идет речь ( а не современное определение). Это означает, что GMT и UTC могут отличаться для дат до 9 апреля 1968. См. Конец этого информационного сообщения в блоге для подробной экспозиции.
Ответ 2
GMT почти во всех случаях означает UTC.
Но сегодня это неправильное слово для того, чем оно должно быть.
К сожалению, Apple использует термин GMT, в то время как он должен использовать UTC.
GMT больше не существует в смысле UTC (с 1928 года), но, к сожалению, в Великобритании и в Африке этот термин все еще используется для обозначения западноевропейского или западноевропейского летнего времени. Реальное время по Гринвичу сегодня называется UT и может отличаться от UTC до 0,9 с.
Статья в Википедии: Английский | Немецкий
Однако в некоторых компьютерных программах (почтовый заголовок) по историческим причинам (unix) он все еще называется GMT (в смысле UTC)
Ответ 3
Статья 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]];
}