2010-12-20 112 views
71

我知道NSDateformatter功能套件对于人类来说是一个福音,但同时它对我来说也是非常困惑。我希望你能帮助我。iOS:如何从数字中获得适当的月份名称?

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

这是做到这一点?这似乎有点罗嗦。

+1

你可以用LLLL – 2014-03-31 11:26:16

回答

144

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

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

注意,您需要从1..12 monthNumber减去1,因为monthSymbols是从零开始的。

+0

由于更换MMMM!虽然其他答案也很有用,但这个适合我的情况最好! – Sjakelien 2010-12-22 13:38:56

+2

monthSymbols的文档:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html – firecall 2012-01-02 03:46:18

+11

这实际上只适用于英语语言环境(以及类似的语言)。它不适用于使用案例的语言的区域设置,例如斯拉夫语言。必须使用'standaloneMonthSymbols'。 – Sulthan 2013-03-22 18:52:57

0

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

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

您应该在初始化日期格式化程序后设置区域设置。

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

希望这有助于

8

如何:

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

从安娜·卡列尼娜和卡尔这两个答案,因为他们不会为一些文化中nominativ返回月份名称不工作那么好。我建议(用standaloneMonthSymbols更换monthSymbols

11

最好的解决办法是,standaloneMonthSymbols方法,

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

    NSArray *monthNames = [formate standaloneMonthSymbols]; 

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

    return monthName; 
} 
1

并与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)]; 
} 
3

NSDate to NSString- > As Dateformat Ex:2015/06/24

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

的NSDate到的NSString- >如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); 
14

夫特2。0

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

在雨燕3.0

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

    // result 
    "March\n"