web-dev-qa-db-fra.com

NSDateFormatter n'affiche pas le nom complet du mois, uniquement un numéro à un chiffre

Je ne sais pas quel est le problème, mais au lieu d'obtenir un nom de mois "juillet", je reçois "07".

dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setLocale:[NSLocale systemLocale]];
[dateFormat setTimeZone:[NSTimeZone localTimeZone]];    
[dateFormat setDateFormat:@"MMMM dd, h:mm a"];

J'ai essayé M, MM, MMM, MMMM, et tous me donnent un nombre, au lieu du nom du mois, mais avec différentes quantités de 0 en tête.

27
Chris

Se révèle être un problème avec la deuxième ligne, setLocale. Je suppose que le système n'utilisera pas par défaut les noms de mois anglais lorsque le locale a été défini manuellement? Je vis dans un locale anglophone, mais peut-être que cela n'a pas d'importance.

Dans tous les cas, le fait de ne pas définir les paramètres régionaux résout le problème du nom du mois.

dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:[NSTimeZone localTimeZone]];    
[dateFormat setDateFormat:@"MMMM dd, h:mm a"];
52
Chris

Le problème vient des paramètres régionaux, pas du format. Regarde ça:

http://waracle.net/mobile/iphone-nsdateformatter-date-formatting-table/

Fondamentalement, "MMMM" vous donnera le nom complet du mois.

12
J2theC

-systemLocale n'est pas ce que vous voulez ici. Il renvoie un paramètre régional de secours si aucun autre paramètre local ne convient. Utilisation -currentLocale pour obtenir les paramètres régionaux actuels de l'utilisateur.

Aussi:
Vous devez utiliser NSDateFormatter's +dateFormatFromTemplate:options:locale: méthode pour obtenir le format de date correct. Dans certaines langues, le jour précède le mois, etc. et vice versa.

8
Fabian Kreiser