格式化月份字符串不起作用
Formatting a month string is not working
我正在尝试创建看起来像 "Jan"、"Feb"、"Mar" 的月份字符串...这是我的代码:
- (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,则必须提供月份名称为 "Feb",依此类推.但问题是,即使我将格式设置为 MMM
,它仍在创建 "January"、"February" 等类型的月份名称,而不是 "Jan"、"Feb" 等等。我该如何解决这个问题?
standaloneMonthSymbols 是 NSDateFormatter 的 属性。我认为它没有使用您设置的 dateFormat。尝试使用 shortStandaloneMonthSymbols 属性 (或者 veryShortStandaloneMonthSymbols 如果你只需要一个字母符号)。
尝试以下操作:
-(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;
}
tahavath 是对的。具体来说,您想使用 shortStandaloneMonthSymbols 属性 来打印 "Jan" 或 "Feb" 等
尝试:
-(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;
}
检查你的代码@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
}
这通常不是 NSDateFormatter 的用途 - 它用于转换实际日期,而不仅仅是月份数字。
如果你想坚持下去,我建议
-(NSString*)getMonthNameString:(int)monthNumber {
NSDateFormatter *formatter = [NSDateFormatter new];
return formatter.shortMonthSymbols[monthNumber-1];
}
我认为对 > 0 的额外检查没有任何好处。这只是掩盖了编程错误。您可能想添加一个断言以在开发过程中捕获它。 (为什么无效数字 return 一月份呢?)
虽然创建格式化程序很昂贵 - 您可能希望一遍又一遍地重复使用同一个实例。
或者直接访问数组,即
-(NSString*)getMonthNameString:(int)monthNumber {
return @[@"Jan", @"Feb", ...][monthNumber-1]; // write up to December of course
}
我正在尝试创建看起来像 "Jan"、"Feb"、"Mar" 的月份字符串...这是我的代码:
- (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,则必须提供月份名称为 "Feb",依此类推.但问题是,即使我将格式设置为 MMM
,它仍在创建 "January"、"February" 等类型的月份名称,而不是 "Jan"、"Feb" 等等。我该如何解决这个问题?
standaloneMonthSymbols 是 NSDateFormatter 的 属性。我认为它没有使用您设置的 dateFormat。尝试使用 shortStandaloneMonthSymbols 属性 (或者 veryShortStandaloneMonthSymbols 如果你只需要一个字母符号)。
尝试以下操作:
-(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;
}
tahavath 是对的。具体来说,您想使用 shortStandaloneMonthSymbols 属性 来打印 "Jan" 或 "Feb" 等
尝试:
-(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;
}
检查你的代码@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
}
这通常不是 NSDateFormatter 的用途 - 它用于转换实际日期,而不仅仅是月份数字。
如果你想坚持下去,我建议
-(NSString*)getMonthNameString:(int)monthNumber {
NSDateFormatter *formatter = [NSDateFormatter new];
return formatter.shortMonthSymbols[monthNumber-1];
}
我认为对 > 0 的额外检查没有任何好处。这只是掩盖了编程错误。您可能想添加一个断言以在开发过程中捕获它。 (为什么无效数字 return 一月份呢?)
虽然创建格式化程序很昂贵 - 您可能希望一遍又一遍地重复使用同一个实例。
或者直接访问数组,即
-(NSString*)getMonthNameString:(int)monthNumber {
return @[@"Jan", @"Feb", ...][monthNumber-1]; // write up to December of course
}