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
monthSymbols
replacemonthSymbols
)
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的释放和重新分配,删除几行,但这就是我看到的。