web-dev-qa-db-fra.com

NSTimeZone: Y a-t-il une différence entre "UTC" et "GMT"?

Ces cinq déclarations sont-elles interchangeables, ou quelqu'un connaît-il des cas où leur utilisation donnerait des résultats différents? D'après ce que je comprends, ils sont équivalents, mais je n'ai rien trouvé de concluant, et les différences potentielles entre les variantes GMT et UTC m'inquiètent.

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

Selon la documentation , CFTimeZone (et par extension, NSTimeZone) utilise les noms de fuseau horaire, les abréviations, le décalage GMT et les informations DST du TZ (ou "Olsen") Database .

En regardant la source , vous verrez que, bien que sémantiquement "GMT" et "UTC" soient assez distincts, en pratique ils ne sont pas différents: "GMT" est juste un fuseau horaire à décalage nul.

Mise à jour : Bien que cette réponse reste vraie pour les dates postérieures au 9 avril 1968, lorsqu'il s'agit de dates historiques, il semble que Cocoa utilise d'anciennes définitions de GMT qui étaient valides à la date en question (plutôt que la définition moderne). Cela signifie que GMT et UTC peuvent différer pour les dates antérieures au 9 avril 1968. Voir la fin de ce billet de blog informatif pour une exposition détaillée.

41
followben

GMT dans presque tous les cas signifie UTC.
Mais aujourd'hui, ce n'est pas la bonne Parole pour ce qu'elle est censée être.
Unfortunatley Apple utilise le terme GMT, alors qu'il devrait utiliser UTC.

GMT n'existe plus au sens de l'UTC (depuis 1928) mais malheureusement au Royaume-Uni et en Afrique ce terme est encore utilisé pour désigner l'heure d'Europe de l'Ouest ou l'heure d'été d'Europe de l'Ouest. Le vrai GMT aujourd'hui s'appelle UT et peut différer de l'UTC jusqu'à 0,9s.

L'article sur Wikipédia: anglais | allemand

Cependant, dans certains programmes informatiques (en-tête de courrier), pour des raisons historiques (unix), il est toujours appelé GMT (au sens de UTC)

7
AlexWien

article NSDateFormatter et Internet Dates d'Apple utilise [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]];
}
4
Heath Borders