iOS:如何从数字中获取正确的月份名称?

Sja*_*ien 79 numbers nsdateformatter ios

我知道NSDateformatter功能套件对人类来说是一个福音,但同时它对我来说非常困惑.我希望你能帮助我.

在我的代码中,有一个代表一个月的int.所以:1将是1月,2月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];
Run Code Online (Sandbox Code Playgroud)

这是这样做的方法吗?这看起来有点罗嗦.

小智 154

另一种选择是使用monthSymbols方法:

int monthNumber = 11;   //November
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];
Run Code Online (Sandbox Code Playgroud)

请注意,由于monthSymbols从零开始,因此您需要从1.12个月的数字中减去1.

  • 这实际上只适用于英语语言环境(和类似语言).它不适用于使用案例的语言的语言环境,例如斯拉夫语言.必须使用`standaloneMonthSymbols`. (13认同)
  • 简化:```NSString*monthName = [[[NSDateFormatter alloc] init] monthSymbols] [monthNumber-1];``` (5认同)
  • 请使用standaloneMonthSymbols (5认同)
  • monthSymbols的文档:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html (2认同)

que*_*ful 28

Swift 2.0

let monthName = NSDateFormatter().monthSymbols[monthNumber - 1]
Run Code Online (Sandbox Code Playgroud)

Swift 4.0

let monthName = DateFormatter().monthSymbols[monthNumber - 1]
Run Code Online (Sandbox Code Playgroud)


Car*_*arl 24

您可以更改NSDateFormatter的dateFormat.所以简化你的代码:

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];
Run Code Online (Sandbox Code Playgroud)

初始化日期格式化程序后,还应设置区域设置.

dateFormatter.locale = [NSLocale currentLocale]; // Or any other locale
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


Nic*_*ico 13

对此的最佳解决方案是,standaloneMonthSymbols方法,

-(NSString*)MonthNameString:(int)monthNumber
{
    NSDateFormatter *formate = [NSDateFormatter new];

    NSArray *monthNames = [formate standaloneMonthSymbols];

    NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)];

    return monthName;
}
Run Code Online (Sandbox Code Playgroud)


Pas*_*cal 10

怎么样:

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];
Run Code Online (Sandbox Code Playgroud)


小智 8

Anna Karenina和Carl的答案都不能很好地发挥作用,因为他们不会在某些文化的名义上返回月份名称.我建议使用从帕斯卡提出的解决方案,解决了这个问题(替换monthSymbolsstandaloneMonthSymbols)


Ash*_*shu 6

斯威夫特 4.X

print((DateFormatter().monthSymbols[month-1].capitalized)) //month is int less than 12

例如:

print((DateFormatter().monthSymbols[11-1].capitalized))

输出

十一月


Hes*_*epa 5

在Swift 3.0中

    let monthNumber = 3
    let fmt = DateFormatter()
    fmt.dateFormat = "MM"
    let month = fmt.monthSymbols[monthNumber - 1]
    print(month)

    // result
   "March\n"        
Run Code Online (Sandbox Code Playgroud)

  • 在某些语言中,最好使用 `standaloneMonthSymbols` 来获得正确的大小写 (3认同)