Eu sei que o conjunto de funcionalidades do NSDateformatter é uma benção para a humanidade, mas ao mesmo tempo é muito confuso para mim. Eu espero que você possa me ajudar.
Em algum lugar no meu código, há um int que representa um mês. Portanto: 1 seria janeiro, 2 de fevereiro, etc.
Na minha interface de usuário, gostaria de exibir esse número inteiro como o nome do mês adequado. Além disso, deve estar de acordo com a localidade do dispositivo.
Obrigado por seus insights
Nesse ínterim, fiz o seguinte:
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];
é assim que se faz? Parece um pouco prolixo.
ios
numbers
nsdateformatter
Sjakelien
fonte
fonte
Respostas:
Outra opção é usar o método monthSymbols:
int monthNumber = 11; //November NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];
Observe que você precisará subtrair 1 de 1..12 monthNumber, pois monthSymbols é baseado em zero.
fonte
standaloneMonthSymbols
deve ser usado.NSString *monthName = [[[NSDateFormatter alloc] init] monthSymbols][monthNumber-1];
[df shortMonthSymbols]
se quiser nomes curtos para os meses (janeiro, fevereiro ...).Swift 2.0
let monthName = NSDateFormatter().monthSymbols[monthNumber - 1]
Swift 4.0
let monthName = DateFormatter().monthSymbols[monthNumber - 1]
fonte
Você pode alterar o dateFormat do NSDateFormatter. Então, para simplificar seu código:
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];
Você também deve definir o local depois de inicializar o formatador de data.
dateFormatter.locale = [NSLocale currentLocale]; // Or any other locale
Espero que isto ajude
fonte
A melhor solução para isso é,
standaloneMonthSymbols
método,-(NSString*)MonthNameString:(int)monthNumber { NSDateFormatter *formate = [NSDateFormatter new]; NSArray *monthNames = [formate standaloneMonthSymbols]; NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)]; return monthName; }
fonte
E se:
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];
fonte
Ambas as respostas de Anna Karenina e Carl não funcionam muito bem, pois não retornarão o nome do mês no nominativ para algumas culturas. Sugiro usar a solução proposta de Pascal, que resolve esse problema (substituindo
monthSymbols
porstandaloneMonthSymbols
)fonte
Em Swift 3.0
let monthNumber = 3 let fmt = DateFormatter() fmt.dateFormat = "MM" let month = fmt.monthSymbols[monthNumber - 1] print(month) // result "March\n"
fonte
standaloneMonthSymbols
para maiúsculas e minúsculas em alguns idiomasSwift 4.X
print((DateFormatter().monthSymbols[month-1].capitalized)) //month is int less than 12
Por exemplo:
print((DateFormatter().monthSymbols[11-1].capitalized))
Resultado
novembro
fonte
NSDate para 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 para NSString -> As Dateformat Ex: 24 de junho de 2015, 13h02
[dateformate setDateFormat:@"yyyy MMMM dd, h:mm a"]; NSString *displayDate = [dateformate stringFromDate:selectedDate]; // Convert date to string NSLog(@"date :%@",date); NSLog(@"Display time = %@", displayDate);
fonte
E com 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)]; }
fonte
Você deve conseguir se livrar da liberação e realocação do dateFormatter, cortando algumas linhas, mas é tudo o que vejo.
fonte