Je sais que la suite de fonctionnalités NSDateformatter est une aubaine pour l'humanité, mais en même temps c'est très déroutant pour moi. J'espère que vous pourrez m'aider.
Quelque part dans mon code, il y a un int représentant un mois. Donc: 1 serait janvier, 2 février, etc.
Dans mon interface utilisateur, je voudrais afficher cet entier comme nom de mois approprié. De plus, il doit respecter les paramètres régionaux de l'appareil.
Nous vous remercions de vos idées
En attendant, j'ai fait ce qui suit:
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 manière de procéder? Cela semble un peu verbeux.
ios
numbers
nsdateformatter
Sjakelien
la source
la source
Réponses:
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 devrez soustraire 1 de votre 1..12 monthNumber puisque monthSymbols est basé sur zéro.
la source
standaloneMonthSymbols
doit être utilisé.NSString *monthName = [[[NSDateFormatter alloc] init] monthSymbols][monthNumber-1];
[df shortMonthSymbols]
si vous voulez des noms de mois courts (janvier, février ...).Swift 2.0
let monthName = NSDateFormatter().monthSymbols[monthNumber - 1]
Swift 4.0
let monthName = DateFormatter().monthSymbols[monthNumber - 1]
la source
Vous pouvez modifier le dateFormat du NSDateFormatter. Alors 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 lancé le formateur de date.
dateFormatter.locale = [NSLocale currentLocale]; // Or any other locale
J'espère que cela t'aides
la source
La meilleure solution pour cela est, la
standaloneMonthSymbols
méthode,-(NSString*)MonthNameString:(int)monthNumber { NSDateFormatter *formate = [NSDateFormatter new]; NSArray *monthNames = [formate standaloneMonthSymbols]; NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)]; return monthName; }
la source
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];
la source
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 en 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
parstandaloneMonthSymbols
)la source
Dans Swift 3.0
let monthNumber = 3 let fmt = DateFormatter() fmt.dateFormat = "MM" let month = fmt.monthSymbols[monthNumber - 1] print(month) // result "March\n"
la source
standaloneMonthSymbols
pour corriger la casse dans certaines languesSwift 4.X
print((DateFormatter().monthSymbols[month-1].capitalized)) //month is int less than 12
Par exemple:
print((DateFormatter().monthSymbols[11-1].capitalized))
Production
novembre
la source
NSDate à NSString -> As Dateformat Ex: 2015/06/24
NSDateFormatter *dateformate=[[NSDateFormatter alloc]init]; [dateformate setDateFormat: @"yyyy/MM/dd"]; NSString *date = [dateformate stringFromDate:selectedDate]; // Convert date to string
NSDate to NSString -> As Dateformat Ex: 24 juin 2015, 13 h 02
[dateformate setDateFormat:@"yyyy MMMM dd, h:mm a"]; NSString *displayDate = [dateformate stringFromDate:selectedDate]; // Convert date to string NSLog(@"date :%@",date); NSLog(@"Display time = %@", displayDate);
la source
Et avec ARC:
+ (NSString *)monthNameFromDate:(NSDate *)date { if (!date) return @"n/a"; NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setDateFormat:@"MM"]; return [[df monthSymbols] objectAtIndex:([[df stringFromDate:date] integerValue] - 1)]; }
la source
Vous devriez être en mesure de vous débarrasser de la publication et de la réattribution de dateFormatter, en supprimant quelques lignes, mais c'est tout ce que je vois.
la source