Подтвердить что ты не робот

NSTimeZone: Любая разница между "UTC" и "GMT"?

Являются ли эти пять операторов взаимозаменяемыми или кто-нибудь знает о случаях, когда их использование принесет разные результаты? Из того, что я собираю, они эквивалентны, но я не нашел ничего убедительного, и потенциальные различия между вариантами GMT и UTC беспокоят меня.

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

Ответ 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]];
}