Gratulacje, znalazłeś więcej osobliwości strefy czasowej! Masz rację, że zmiana strefy czasowej rozwiąże problem. Chodźmy speleo i zobaczmy, czy potrafimy zrozumieć dlaczego!
Po pierwsze, będziemy próbować znaleźć każdą strefę czasową, w której ta niesamowitość dzieje:
NSArray *tzs = [NSTimeZone knownTimeZoneNames];
NSDateFormatter *f = [[NSDateFormatter alloc] init];
f.dateFormat = @"MMyyyy";
for (NSString *name in tzs) {
f.timeZone = [NSTimeZone timeZoneWithName:name];
NSDate *date = [f dateFromString:@"062008"];
if (date == nil) {
NSLog(@"%@", name);
}
}
To będzie pętli wszystkich znanych stref czasowych i starają się analizować „062008” w tej strefie czasowej. Jeśli prowadzimy to okazuje się, że to kłody:
Africa/Casablanca
Asia/Karachi
Więc zgaduję, że żyjesz w obu Casablanki lub Karaczi (bo domyślnie Twój NSDateFormatter
jest inicjowany z swojej strefy czasowej, która jest dlaczego "Widzę ten problem, prawdopodobnie Casablanca, biorąc pod uwagę, że wydajesz się być 1 godzinę przed GMT).
Zobaczmy, czy możemy dowiedzieć się, co jest dziwne z tych stref czasowych:
$ zdump -v Africa/Casablanca
... snip ...
Africa/Casablanca Sun Jun 1 00:00:00 2008 UTC = Sun Jun 1 01:00:00 2008 WEST isdst=1
... snip ...
$ zdump -v Asia/Karachi
... snip ...
Asia/Karachi Sat May 31 19:00:00 2008 UTC = Sun Jun 1 01:00:00 2008 PKST isdst=1
... snip ...
Rzeczywiście, wygląda na to zarówno Casablanca i Karaczi pomijane godzinę północy 1 czerwca w 2008. Tak więc, jesteś w istocie dając mu nierozłączną datę i wraca nil
. W skrócie.
W tym przypadku prawidłowa odpowiedź jest zmienić strefę czasową (GMT prawdopodobnie jest doskonałym wyborem), ponieważ są szanse, to ciąg jesteś parsowania nie nadchodzi z wejścia użytkownika (biorąc pod uwagę jego dziwny format), a w związku z tym powinny być analizowane zgodnie ze standardową strefą czasową. I chociaż jestem przekonany, że Casablanca i Karachi są naprawdę fajnymi miejscami, ich strefy czasowe nie są często spotykane ...
TL; DR:
Daylight Saving Time powinny zostać zniesione.
Napisz własną odpowiedź i kliknij odpowiedź - dostaniesz punkty i sprawisz, że będą wyraźniejsze dla innych użytkowników. –
W swojej odpowiedzi możesz wyjaśnić bardziej szczegółowo: w jaki sposób jest on powiązany ze strefą czasową? OK, zmiana strefy czasowej na GMT "naprawiła" to, ale zrobiła to * naprawdę * naprawiła? W czym problem? Jeśli to naprawdę jest poprawka, a nie tylko bandaż, to w jaki sposób rozwiązuje problem? –
Przy okazji: Jaką strefą czasową * jesteś * w? Kiedy uruchamiam ten kod i najwyraźniej, gdy uruchamia go huzain Shabbir (z odpowiedzi), oboje otrzymujemy datę '@" 062008 "'. Ty nie, więc w jakiej strefie czasowej i kalendarzu używasz swojego formatera? Jeśli zostawisz to ustawienie domyślne, do jakiej strefy czasowej i kalendarza jest ustawiony system? –