Copié d'une question similaire, je répondais ici: NSDateFormatter returns nil for @"dd-MM-yy" in iOS 3.0
Si vous travaillez avec des dates visibles par l'utilisateur, vous devez éviter de créer une chaîne de format de date. La mise en forme de dates de cette manière n'est pas localisable et rend impossible la prédiction de l'expression de votre chaîne de format dans toutes les configurations utilisateur possibles. Vous devriez plutôt essayer de vous limiter à la définition de styles de date et d'heure (via - [NSDateFormatter setDateStyle:] et - [NSDateFormatter setTimeStyle:]). D'autre part, si vous travaillez avec des dates au format fixe, vous devez d'abord définir les paramètres régionaux du formateur de date sur quelque chose de approprié pour votre format fixe. Dans la plupart des cas, le meilleur paramètre à choisir est «en_US_POSIX», un environnement local spécialement conçu pour générer des résultats en anglais américain, indépendamment des préférences de l'utilisateur et du système. "en_US_POSIX" est également invariant dans le temps (si les Etats-Unis, à un moment donné, modifient la façon dont il formate les dates, "en_US" changera pour refléter le nouveau comportement, mais "en_US_POSIX" ne le sera pas) et entre machines ("en_US_POSIX" fonctionne de la même manière sur iPhone OS que sur Mac OS X, comme sur d'autres plateformes). Une fois que vous avez défini "en_US_POSIX" comme paramètres régionaux du formateur de date, vous pouvez définir la chaîne de format de date et le formateur de date se comportera de manière cohérente pour tous les utilisateurs.
Les informations ci-dessus et d'autres se trouvent dans Technical Q&A QA1480 Apple
Voici un extrait de code de mon application qui met en œuvre la recommandation ci-dessus:
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";
}
C'était la chose 24 heures me faire apparemment. Merci. – jamone