91 votes

iOS: Comment obtenir un nom de mois correct à partir d'un numéro?

Je sais que le NSDateformatter suite de la fonctionnalité est une aubaine pour l'humanité, mais en même temps c'est très confus pour moi. J'espère que vous pourrez m'aider.

Quelque part dans mon code, il y a un int qui représente un mois. Donc: 1 janvier, 2 février, etc.

Dans mon interface utilisateur, je voudrais afficher ce entier comme bon nom de mois. En outre, il doit respecter les paramètres régionaux de l'appareil.

Merci pour vos idées

Dans le même temps, j'ai effectué les opérations suivantes:

int monthNumber = 11
NSString * dateString = [NSString stringWithFormat: @"%d", monthNumber];

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM"];
NSDate* myDate = [dateFormatter dateFromString:dateString];
[dateFormatter release];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMM"];
NSString *stringFromDate = [formatter stringFromDate:myDate];
[formatter release];

est-ce la façon de le faire? Il semble un peu verbeux.

166voto

Anna Points 44332

Une autre option consiste à utiliser la méthode monthSymbols:

 int monthNumber = 11;   //November
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];
 

Notez que vous devez soustraire 1 de votre 1..12 mois depuis le numéro mois puisque les symboles mensuels sont basés sur zéro.

24voto

Carl Points 568

Vous pouvez modifier le dateFormat de NSDateFormatter. Donc, pour simplifier votre code:

 int monthNumber = 11
NSString * dateString = [NSString stringWithFormat: @"%d", monthNumber];

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM"];
NSDate* myDate = [dateFormatter dateFromString:dateString];

[formatter setDateFormat:@"MMMM"];
NSString *stringFromDate = [formatter stringFromDate:myDate];
[dateFormatter release];
 

Vous devez également définir les paramètres régionaux une fois que vous avez démarré le formateur de date.

 dateFormatter.locale = [NSLocale currentLocale]; // Or any other locale
 

J'espère que cela t'aides

13voto

Nico Points 595

La meilleure solution pour cela est la méthode standaloneMonthSymbols ,

 -(NSString*)MonthNameString:(int)monthNumber
{
    NSDateFormatter *formate = [NSDateFormatter new];

    NSArray *monthNames = [formate standaloneMonthSymbols];

    NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)];

    return monthName;
}
 

10voto

Pascal Points 8222

Que diriez-vous:

 NSUInteger i = <your month integer>;
NSDateFormatter *df = [NSDateFormatter new];
// change locale if the standard is not what you want
NSArray *monthNames = [df standaloneMonthSymbols];
NSString *monthName = [monthNames objectAtIndex:(i - 1)];
[df release];
 

8voto

serb Points 193

Les deux réponses d'Anna Karenina et de Carl ne fonctionnent pas très bien car elles ne renverront pas le nom du mois nominatif pour certaines cultures. Je suggère d'utiliser la solution proposée par Pascal, qui résout ce problème (en remplaçant monthSymbols par standaloneMonthSymbols

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X