2010-12-20 41 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"   
相關問題