Я знаю, что набор функций NSDateformatter является благом для человечества, но в то же время меня очень сбивает с толку. Я надеюсь, ты сможешь мне помочь.
Где-то в моем коде есть int, представляющий месяц. Итак: 1 будет января, 2 февраля и т. Д.
В моем пользовательском интерфейсе я хотел бы отображать это целое число как собственное название месяца. Причем он должен соответствовать региону устройства.
Спасибо за понимание
Тем временем я сделал следующее:
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];
это способ сделать это? Это кажется многословным.
ios
numbers
nsdateformatter
Sjakelien
источник
источник
Ответы:
Другой вариант - использовать метод monthSymbols:
int monthNumber = 11; //November NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];
Обратите внимание, что вам нужно вычесть 1 из вашего 1..12 monthNumber, поскольку monthSymbols отсчитывается от нуля.
источник
standaloneMonthSymbols
должны быть использованы.NSString *monthName = [[[NSDateFormatter alloc] init] monthSymbols][monthNumber-1];
[df shortMonthSymbols]
если вам нужны короткие названия месяцев (январь, февраль ...).Swift 2.0
let monthName = NSDateFormatter().monthSymbols[monthNumber - 1]
Swift 4.0
let monthName = DateFormatter().monthSymbols[monthNumber - 1]
источник
Вы можете изменить dateFormat NSDateFormatter. Итак, чтобы упростить ваш код:
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];
Вы также должны установить языковой стандарт после запуска средства форматирования даты.
dateFormatter.locale = [NSLocale currentLocale]; // Or any other locale
Надеюсь это поможет
источник
Лучшее решение для этого -
standaloneMonthSymbols
метод,-(NSString*)MonthNameString:(int)monthNumber { NSDateFormatter *formate = [NSDateFormatter new]; NSArray *monthNames = [formate standaloneMonthSymbols]; NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)]; return monthName; }
источник
Как насчет:
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];
источник
Оба ответа от Анны Карениной и Карла не работают так хорошо, поскольку они не возвращают название месяца в номинальном для некоторых культур. Предлагаю использовать предлагаемое решение от Паскаля, которое решает эту проблему (заменой
monthSymbols
наstandaloneMonthSymbols
)источник
В Swift 3.0
let monthNumber = 3 let fmt = DateFormatter() fmt.dateFormat = "MM" let month = fmt.monthSymbols[monthNumber - 1] print(month) // result "March\n"
источник
standaloneMonthSymbols
для правильного регистра в некоторых языкахSwift 4.X
print((DateFormatter().monthSymbols[month-1].capitalized)) //month is int less than 12
Например:
print((DateFormatter().monthSymbols[11-1].capitalized))
Выход
Ноябрь
источник
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 в NSString -> As Dateformat Пример: 24 июня 2015 г., 13: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);
источник
И с 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)]; }
источник
Вы сможете избавиться от выпуска и перераспределения dateFormatter, вырезав пару строк, но это все, что я вижу.
источник