iOS:如何从一个数字中获得一个合适的月份名称?

我知道NSDateformatterfunction套件对于人类来说是一个福音,但同时对我来说也是非常困惑的。 我希望你能帮助我。

在我的代码中,有一个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]; 

这是怎么做到的? 这似乎有点罗嗦。

另一种select是使用monthSymbols方法:

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

请注意,由于monthSymbols是从零开始的,因此您需要从1..12个月份减去1。

您可以更改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]; 

一旦你初始化date格式化程序,你也应该设置区域设置。

 dateFormatter.locale = [NSLocale currentLocale]; // Or any other locale 

希望这可以帮助

Swift 2.0

 let monthName = NSDateFormatter().monthSymbols[monthNumber - 1] 

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

 -(NSString*)MonthNameString:(int)monthNumber { NSDateFormatter *formate = [NSDateFormatter new]; NSArray *monthNames = [formate standaloneMonthSymbols]; NSString *monthName = [monthNames objectAtIndex:(monthNumber - 1)]; return monthName; } 

怎么样:

 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]; 

安娜·卡列尼娜和卡尔的答案都不能很好地工作,因为他们不会在一些文化中换取月份名字。 我build议使用Pascal提出的解决scheme解决这个问题(通过用standaloneMonthSymbols monthSymbolsreplacemonthSymbols

NSDate到NSString – > As Dateformat例: 2015/06/24

  NSDateFormatter *dateformate=[[NSDateFormatter alloc]init]; [dateformate setDateFormat: @"yyyy/MM/dd"]; NSString *date = [dateformate stringFromDate:selectedDate]; // Convert date to string 

NSDate到NSString – > As Dateformat例如: 2015年6月24日下午1:02

  [dateformate setDateFormat:@"yyyy MMMM dd, h:mm a"]; NSString *displayDate = [dateformate stringFromDate:selectedDate]; // Convert date to string NSLog(@"date :%@",date); NSLog(@"Display time = %@", displayDate); 

在Swift 3.0中

  let monthNumber = 3 let fmt = DateFormatter() fmt.dateFormat = "MM" let month = fmt.monthSymbols[monthNumber - 1] print(month) // result "March\n" 

而用ARC:

 + (NSString *)monthNameFromDate:(NSDate *)date { if (!date) return @"n/a"; NSDateFormatter *df = [[NSDateFormatter alloc] init]; [df setDateFormat:@"MM"]; return [[df monthSymbols] objectAtIndex:([[df stringFromDate:date] integerValue] - 1)]; } 

你应该能够摆脱dateFormatter的释放和重新分配,删除几行,但这就是我看到的。