iOS:数字から適切な月の名前を取得するにはどうすればよいですか?


86

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

これはそれを行う方法ですか?少し言葉が多いようです。


1
MMMMをLLLLに置き換えることができます
Peter Stajger 2014年

回答:


162

もう1つのオプションは、monthSymbolsメソッドを使用することです。

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

monthSymbolsはゼロベースであるため、1..12monthNumberから1を引く必要があることに注意してください。



14
これは実際には英語ロケール(および同様の言語)でのみ機能します。スラブ語など、ユースケースを使用する言語のロケールでは機能しません。standaloneMonthSymbols使用する必要があります。
スルタン2013年

5
簡略化:NSString *monthName = [[[NSDateFormatter alloc] init] monthSymbols][monthNumber-1];
Johannes Fahrenkrug 2013年

7
どうぞ、standaloneMonthSymbolsを使用してください
Roman Truba 2014年

1
[df shortMonthSymbols]短い月の名前(1月、2月...)が必要な場合に使用します。
ShobhitC18年

36

Swift 2.0

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

Swift 4.0

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

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

お役に立てれば


13

これに対する最善の解決策は、standaloneMonthSymbols方法、

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

    NSArray *monthNames = [formate standaloneMonthSymbols];

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

    return monthName;
}

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

8

Anna KareninaとCarlの両方の回答は、一部の文化では主格で月の名前を返さないため、うまく機能しません。この問題を解決するPascalから提案されたソリューションを使用することをお勧めします(に置き換えることmonthSymbolsstandaloneMonthSymbols


6

Swift3.0では

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

    // result
   "March\n"        

2
standaloneMonthSymbols一部の言語では正しいケースに使用する方が良い
Gleb Tarasov 2018

6

Swift 4.X

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

例えば:

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

出力

11月


3

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時2分

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

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

0

dateFormatterのリリースと再割り当てを取り除き、数行を切り取ることができるはずですが、私が見るのはそれだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.