2013-02-18 13 views
30

Czy te pięć stwierdzeń jest wymiennych, czy ktoś jest świadomy przypadków, w których ich zastosowanie przyniosłoby inne wyniki? Z tego co wiem, są one równoważne, ale nie znalazłem nic rozstrzygającego, a potencjalne różnice między wariantami GMT i UTC mnie martwią.NSTimeZone: Jakakolwiek różnica między "UTC" i "GMT"?

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

Jestem stosunkowo pewne, że obie są zasadniczo identyczne w systemie iOS. –

Odpowiedz

34

Według the docs, CFTimeZone (i co za tym idzie, NSTimeZone) używa nazwy strefa czasowa, skróty GMT offset, i DST informacje z TZ (or "Olsen") Database.

Patrząc na , zobaczymy, że chociaż semantycznie "GMT" i "UTC" są całkiem różne, w praktyce nie różnią się: "GMT" to strefa czasowa z przesunięciem zerowym.

Aktualizacja: Chociaż ta odpowiedź pozostaje prawdą dla dat później niż 9 kwietnia 1968 roku, gdy mamy do czynienia z dat historycznych, wydaje się, kakao używa przeszłości definicje GMT które były ważne w dniu, o którym mowa (zamiast nowoczesnej definicji) . Oznacza to, że czasy GMT i UTC mogą się różnić w przypadku dat sprzed 9 kwietnia 1968 r. Szczegółowe informacje można znaleźć pod koniec: this informative blog post.

+0

Dziękuję za doskonałą odpowiedź, nie mogłem marzyć o bardziej autorytatywny! Jeśli chodzi o semantykę, jednym z powodów mojego zainteresowania było to, że dokumenty Apple wydają się odnosić do czasu uniwersalnego jako GMT (nie UTC, jak bym się spodziewał). Na przykład Apple opisuje NSDate 'timeIntervalSinceReferenceDate' jako" Zwraca interwał między odbiornikiem a pierwszą chwilą 1 stycznia 2001 roku, GMT ". Ale teraz czuję się z tym dobrze, dziękuję. – Clafou

4

GMT w prawie wszystkich przypadkach oznacza UTC.
Ale dziś jest to niewłaściwe słowo, które należy rozumieć.
Unfortunatley Apple używa terminu GMT, a powinien używać UTC.

GMT już nieistniejący w sensie UTC (od 1928), ale niestety w Wielkiej Brytanii i Afryce ten termin jest nadal używany do oznaczenia czasu zachodnioeuropejskiego lub zachodnioeuropejskiego czasu letniego. Prawdziwe GMT nosi dziś nazwę UT i może różnić się od UTC nawet o 0,9 s.

(Artykuł na wiki nie istnieje w języku angielskim, ale w wielu innych językach - interesujący: german link).

Jednak w niektórych programms komputerowych (poczta nagłówka) ze względów historycznych (Unix) to nadal nazywa GMT (w sensie UTC)

3

Apple's NSDateFormatter and Internet Dates article używa [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]]; 
} 
Powiązane problemy