skopiowany z podobnym pytaniem ja tu odpowiedzi: NSDateFormatter returns nil for @"dd-MM-yy" in iOS 3.0
Jeśli pracujesz z datami użytkownika widoczne, należy unikać ustawiania ciąg formatu daty. Formatowanie dat w ten sposób nie jest możliwe do zlokalizowania i uniemożliwia przewidywanie, w jaki sposób ciąg znaków będzie wyrażany we wszystkich możliwych konfiguracjach użytkownika. Zamiast tego powinieneś ograniczyć się do ustawiania stylów daty i czasu (via - [NSDateFormatter setDateStyle:] i - [NSDateFormatter setTimeStyle:]).
Z drugiej strony, jeśli pracujesz z ustalonymi datami, powinieneś najpierw ustawić ustawienia regionalne formatera daty na coś odpowiedniego dla Twojego stałego formatu. W większości przypadków najlepszym wybranym językiem jest "en_US_POSIX", ustawienie regionalne, które zostało zaprojektowane tak, aby zapewniało wyniki w języku angielskim w USA bez względu na preferencje użytkownika i systemu. "en_US_POSIX" jest również niezmiennikiem w czasie (jeśli USA, w pewnym momencie w przyszłości, zmieni sposób formatowania dat, "en_US" zmieni się, aby odzwierciedlić nowe zachowanie, ale "en_US_POSIX" nie będzie) oraz między komputerami ("en_US_POSIX" działa tak samo w systemie iPhone OS, jak w systemie Mac OS X, i tak samo jak na innych platformach).
Po ustawieniu "en_US_POSIX" jako lokalizacji ustawnika formatowania daty można ustawić ciąg formatu daty, a formatownik będzie zachowywał się konsekwentnie dla wszystkich użytkowników.
Powyższy informacji i więcej można znaleźć w Apple Technical Q&A QA1480
Oto fragment kodu z mojej aplikacji, która realizuje powyższą rekomendację:
static NSDateFormatter* dateFormatter = nil;
if (!dateFormatter) {
dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *enUSPOSIXLocale = [[[NSLocale alloc]
initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
NSAssert(enUSPOSIXLocale != nil, @"POSIX may not be nil.");
[dateFormatter setLocale:enUSPOSIXLocale];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
dateFormatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss +0000";
}
Było to 24 godzin rzeczą coraz mnie widocznie. Dzięki. – jamone