格式化月份字符串不起作用

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
}