格式化月份字符串无效

时间:2016-06-22 13:25:18

标签: ios objective-c nsdateformatter

我尝试创建的月份字符串看起来像" 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月"我该如何解决这个问题?

6 个答案:

答案 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
  }