buttons - iOS: ¿Cómo obtener un nombre de mes correcto de un número?
navigation bar ios (11)
Ambas respuestas de Anna Karenina y Carl no funcionan tan bien ya que no devolverán el nombre del mes en nominativ para algunas culturas. Sugiero usar la solución propuesta de Pascal, que resuelve este problema (reemplazando monthSymbols
con standaloneMonthSymbols
)
Sé que el conjunto de funciones de NSDateformatter es una bendición para la humanidad, pero al mismo tiempo me resulta muy confuso. Espero que me puedas ayudar.
En algún lugar de mi código, hay un int que representa un mes. Entonces: 1 sería enero, 2 de febrero, etc.
En mi interfaz de usuario, me gustaría mostrar este entero como el nombre correcto del mes. Además, debe cumplir con la configuración regional del dispositivo.
Gracias por tus ideas
Mientras tanto, he hecho lo siguiente:
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];
¿Es esta la manera de hacerlo? Parece un poco prolijo.
Debería poder deshacerse del lanzamiento y la reasignación de dateFormatter, cortando un par de líneas, pero eso es todo lo que veo.
La mejor solución para esto es el método standaloneMonthSymbols
,
-(NSString*)MonthNameString:(int)monthNumber
{
NSDateFormatter *formate = [NSDateFormatter new];
NSArray *monthNames = [formate standaloneMonthSymbols];
NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)];
return monthName;
}
Otra opción es usar el método monthSymbols:
int monthNumber = 11; //November
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];
Tenga en cuenta que deberá restar 1 de su 1.12 mesNúmero ya que el mes Símbolos no tiene base.
Puede cambiar el formato de fecha de NSDateFormatter. Para simplificar tu 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];
También debe establecer la configuración regional una vez que inicie el formateador de fecha.
dateFormatter.locale = [NSLocale currentLocale]; // Or any other locale
Espero que esto ayude
Qué tal si:
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];
Y con 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)];
}
En Swift 3.0
let monthNumber = 3
let fmt = DateFormatter()
fmt.dateFormat = "MM"
let month = fmt.monthSymbols[monthNumber - 1]
print(month)
// result
"March/n"
NSDate a NSString -> como 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 a NSString -> Como Dateformat Ex: 2015 24 de junio, 1:02 PM
[dateformate setDateFormat:@"yyyy MMMM dd, h:mm a"];
NSString *displayDate = [dateformate stringFromDate:selectedDate]; // Convert date to string
NSLog(@"date :%@",date);
NSLog(@"Display time = %@", displayDate);
Swift 2.0
let monthName = NSDateFormatter().monthSymbols[monthNumber - 1]
Swift 4.X
print((DateFormatter().monthSymbols[month-1].capitalized)) //month is int less than 12
Por ejemplo:
print((DateFormatter().monthSymbols[11-1].capitalized))
Salida
noviembre