我尝试创建的月份字符串看起来像" Jan"," 2月"," 3月" ...这是我的代码:
- (NSString *)getMonthNameString:(int)monthNumber {
NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setDateFormat:@"MMM"];
NSArray *monthNames = [formatter standaloneMonthSymbols];
NSString *monthName;
if (monthNumber > 0) {
return monthNames[monthNumber - 1];
}
return monthNames[1];
}
因此,如果月份数为1,我希望代码提供月份名称为" Jan"如果是2,则必须提供月份名称为" 2月"等等。但问题是,即使我将格式设置为MMM
,它仍然会创建类型为" 1月"," 2月"的月份名称。等而不是" Jan"," 2月"我该如何解决这个问题?
答案 0 :(得分:2)
尝试:
-(NSString*)getMonthNameString:(int)monthNumber
{
NSDateFormatter *formate = [NSDateFormatter new];
[formate setDateFormat:@"MMM"];
NSArray *monthNames = [formate shortMonthSymbols];
NSString *monthName;
if (monthNumber > 0)
{
monthName = [monthNames objectAtIndex:(monthNumber - 1)];
}
return monthName;
}
答案 1 :(得分:2)
这通常不是NSDateFormatter的用途 - 它用于转换实际日期,而不仅仅是月份数字。
如果你想坚持下去,我建议
-(NSString*)getMonthNameString:(int)monthNumber {
NSDateFormatter *formatter = [NSDateFormatter new];
return formatter.shortMonthSymbols[monthNumber-1];
}
我认为额外检查>没有任何好处;这只是掩盖编程错误。您可能希望添加一个断言以在开发期间捕获该断言。 (无论如何,为什么无效的数字会返回1月?)
但是,创建格式化程序很昂贵 - 您可能希望一遍又一遍地重复使用同一个实例。
或直接访问数组,即
-(NSString*)getMonthNameString:(int)monthNumber {
return @[@"Jan", @"Feb", ...][monthNumber-1]; // write up to December of course
}
答案 2 :(得分:1)
standaloneMonthSymbols 是NSDateFormatter的一个属性。我不认为它使用你设置的 dateFormat 。请尝试使用 shortStandaloneMonthSymbols 属性(如果只需要一个字母符号,则使用 veryShortStandaloneMonthSymbols )。
答案 3 :(得分:1)
尝试以下方法:
-(NSString*)getMonthNameString:(int)monthNumber
{
NSDateFormatter *formate = [NSDateFormatter new];
[formate setDateStyle:NSDateFormatterMediumStyle];
[formate setDateFormat:@"MMM"];
NSArray *monthNames = [formate standaloneMonthSymbols];
NSString *monthName;
if (monthNumber > 0)
{
monthName = [monthNames objectAtIndex:(monthNumber - 1)];
}
return monthName;
}
答案 4 :(得分:1)
tahavath是对的。具体来说,您希望使用shortStandaloneMonthSymbols属性来打印“Jan”或“Feb”等。
答案 5 :(得分:0)
检查您的代码@Karuppu MGR
-(NSString*)getMonthNameString:(int)monthNumber
{
NSDateFormatter *formate = [NSDateFormatter new];
[formate setDateFormat:@"MMM"];
NSArray *monthNames = [formate standaloneMonthSymbols];
NSString *monthName;
if (monthNumber > 0 && monthNumber<13)
{
monthName = [monthNames objectAtIndex:(monthNumber - 1)];
// your process is right but , here you have attached "return value " so every time return the monthNames array value.
}
return monthName; // if you pass zero or greathan twelve monthName return nil value
}