IOS: Как получить правильное название месяца из числа?
Я знаю, что набор функциональных возможностей 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];
- это способ сделать это? Это кажется немногословным.
Ответы
Ответ 1
Другой вариант - использовать метод monthSymbols:
int monthNumber = 11; //November
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];
Обратите внимание, что вам нужно будет вычесть 1 из вашего 1..12 monthNumber с месяца. Символы основаны на нуле.
Ответ 2
Вы можете изменить формат даты 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
Надеюсь, что это поможет
Ответ 3
Swift 2.0
let monthName = NSDateFormatter().monthSymbols[monthNumber - 1]
Ответ 4
Лучшим решением для этого является метод standaloneMonthSymbols
,
-(NSString*)MonthNameString:(int)monthNumber
{
NSDateFormatter *formate = [NSDateFormatter new];
NSArray *monthNames = [formate standaloneMonthSymbols];
NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)];
return monthName;
}
Ответ 5
Как насчет:
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];
Ответ 6
Оба ответа от Анны Карениной и Карла не так хорошо работают, поскольку они не будут возвращать название месяца в nominativ для некоторых культур. Я предлагаю использовать предлагаемое решение от Pascal, которое решает эту проблему (заменив monthSymbols
на standaloneMonthSymbols
)
Ответ 7
NSDate для NSString → Как 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 → Как Dateformat Ex: 2015 24 июня, 1: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);
Ответ 8
В Swift 3.0
let monthNumber = 3
let fmt = DateFormatter()
fmt.dateFormat = "MM"
let month = fmt.monthSymbols[monthNumber - 1]
print(month)
// result
"March\n"
Ответ 9
И с 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)];
}
Ответ 10
Вы должны быть в состоянии избавиться от выпуска и перераспределения dateFormatter, вырезая пару строк, но все, что я вижу.